1.text
2
3.globl	x25519_fe51_mul
4.type	x25519_fe51_mul,@function
5
6.align	5
7x25519_fe51_mul:
8	stdu	1,-144(1)
9	std	21,56(1)
10	std	22,64(1)
11	std	23,72(1)
12	std	24,80(1)
13	std	25,88(1)
14	std	26,96(1)
15	std	27,104(1)
16	std	28,112(1)
17	std	29,120(1)
18	std	30,128(1)
19	std	31,136(1)
20
21	ld	6,0(5)
22	ld	7,0(4)
23	ld	8,8(4)
24	ld	9,16(4)
25	ld	10,24(4)
26	ld	11,32(4)
27
28	mulld	22,7,6
29	mulhdu	23,7,6
30
31	mulld	24,8,6
32	mulhdu	25,8,6
33
34	mulld	30,11,6
35	mulhdu	31,11,6
36	ld	4,8(5)
37	mulli	11,11,19
38
39	mulld	26,9,6
40	mulhdu	27,9,6
41
42	mulld	28,10,6
43	mulhdu	29,10,6
44	mulld	12,11,4
45	mulhdu	21,11,4
46	addc	22,22,12
47	adde	23,23,21
48
49	mulld	12,7,4
50	mulhdu	21,7,4
51	addc	24,24,12
52	adde	25,25,21
53
54	mulld	12,10,4
55	mulhdu	21,10,4
56	ld	6,16(5)
57	mulli	10,10,19
58	addc	30,30,12
59	adde	31,31,21
60
61	mulld	12,8,4
62	mulhdu	21,8,4
63	addc	26,26,12
64	adde	27,27,21
65
66	mulld	12,9,4
67	mulhdu	21,9,4
68	addc	28,28,12
69	adde	29,29,21
70	mulld	12,10,6
71	mulhdu	21,10,6
72	addc	22,22,12
73	adde	23,23,21
74
75	mulld	12,11,6
76	mulhdu	21,11,6
77	addc	24,24,12
78	adde	25,25,21
79
80	mulld	12,9,6
81	mulhdu	21,9,6
82	ld	4,24(5)
83	mulli	9,9,19
84	addc	30,30,12
85	adde	31,31,21
86
87	mulld	12,7,6
88	mulhdu	21,7,6
89	addc	26,26,12
90	adde	27,27,21
91
92	mulld	12,8,6
93	mulhdu	21,8,6
94	addc	28,28,12
95	adde	29,29,21
96	mulld	12,9,4
97	mulhdu	21,9,4
98	addc	22,22,12
99	adde	23,23,21
100
101	mulld	12,10,4
102	mulhdu	21,10,4
103	addc	24,24,12
104	adde	25,25,21
105
106	mulld	12,8,4
107	mulhdu	21,8,4
108	ld	6,32(5)
109	mulli	8,8,19
110	addc	30,30,12
111	adde	31,31,21
112
113	mulld	12,11,4
114	mulhdu	21,11,4
115	addc	26,26,12
116	adde	27,27,21
117
118	mulld	12,7,4
119	mulhdu	21,7,4
120	addc	28,28,12
121	adde	29,29,21
122	mulld	12,8,6
123	mulhdu	21,8,6
124	addc	22,22,12
125	adde	23,23,21
126
127	mulld	12,9,6
128	mulhdu	21,9,6
129	addc	24,24,12
130	adde	25,25,21
131
132	mulld	12,10,6
133	mulhdu	21,10,6
134	addc	26,26,12
135	adde	27,27,21
136
137	mulld	12,11,6
138	mulhdu	21,11,6
139	addc	28,28,12
140	adde	29,29,21
141
142	mulld	12,7,6
143	mulhdu	21,7,6
144	addc	30,30,12
145	adde	31,31,21
146
147.Lfe51_reduce:
148	li	0,-1
149	srdi	0,0,13
150
151	srdi	12,26,51
152	and	9,26,0
153	insrdi	12,27,51,0
154	srdi	21,22,51
155	and	7,22,0
156	insrdi	21,23,51,0
157	addc	28,28,12
158	addze	29,29
159	addc	24,24,21
160	addze	25,25
161
162	srdi	12,28,51
163	and	10,28,0
164	insrdi	12,29,51,0
165	srdi	21,24,51
166	and	8,24,0
167	insrdi	21,25,51,0
168	addc	30,30,12
169	addze	31,31
170	add	9,9,21
171
172	srdi	12,30,51
173	and	11,30,0
174	insrdi	12,31,51,0
175	mulli	12,12,19
176
177	add	7,7,12
178
179	srdi	21,9,51
180	and	9,9,0
181	add	10,10,21
182
183	srdi	12,7,51
184	and	7,7,0
185	add	8,8,12
186
187	std	9,16(3)
188	std	10,24(3)
189	std	11,32(3)
190	std	7,0(3)
191	std	8,8(3)
192
193	ld	21,56(1)
194	ld	22,64(1)
195	ld	23,72(1)
196	ld	24,80(1)
197	ld	25,88(1)
198	ld	26,96(1)
199	ld	27,104(1)
200	ld	28,112(1)
201	ld	29,120(1)
202	ld	30,128(1)
203	ld	31,136(1)
204	addi	1,1,144
205	blr
206.long	0
207.byte	0,12,4,0,0x80,11,3,0
208.long	0
209
210.globl	x25519_fe51_sqr
211.type	x25519_fe51_sqr,@function
212
213.align	5
214x25519_fe51_sqr:
215	stdu	1,-144(1)
216	std	21,56(1)
217	std	22,64(1)
218	std	23,72(1)
219	std	24,80(1)
220	std	25,88(1)
221	std	26,96(1)
222	std	27,104(1)
223	std	28,112(1)
224	std	29,120(1)
225	std	30,128(1)
226	std	31,136(1)
227
228	ld	7,0(4)
229	ld	8,8(4)
230	ld	9,16(4)
231	ld	10,24(4)
232	ld	11,32(4)
233
234	add	6,7,7
235	mulli	21,11,19
236
237	mulld	22,7,7
238	mulhdu	23,7,7
239	mulld	24,8,6
240	mulhdu	25,8,6
241	mulld	26,9,6
242	mulhdu	27,9,6
243	mulld	28,10,6
244	mulhdu	29,10,6
245	mulld	30,11,6
246	mulhdu	31,11,6
247	add	6,8,8
248	mulld	12,11,21
249	mulhdu	11,11,21
250	addc	28,28,12
251	adde	29,29,11
252
253	mulli	5,10,19
254
255	mulld	12,8,8
256	mulhdu	11,8,8
257	addc	26,26,12
258	adde	27,27,11
259	mulld	12,9,6
260	mulhdu	11,9,6
261	addc	28,28,12
262	adde	29,29,11
263	mulld	12,10,6
264	mulhdu	11,10,6
265	addc	30,30,12
266	adde	31,31,11
267	mulld	12,21,6
268	mulhdu	11,21,6
269	add	6,10,10
270	addc	22,22,12
271	adde	23,23,11
272	mulld	12,10,5
273	mulhdu	10,10,5
274	addc	24,24,12
275	adde	25,25,10
276	mulld	12,6,21
277	mulhdu	10,6,21
278	add	6,9,9
279	addc	26,26,12
280	adde	27,27,10
281
282	mulld	12,9,9
283	mulhdu	10,9,9
284	addc	30,30,12
285	adde	31,31,10
286	mulld	12,5,6
287	mulhdu	10,5,6
288	addc	22,22,12
289	adde	23,23,10
290	mulld	12,21,6
291	mulhdu	10,21,6
292	addc	24,24,12
293	adde	25,25,10
294
295	b	.Lfe51_reduce
296.long	0
297.byte	0,12,4,0,0x80,11,2,0
298.long	0
299
300.globl	x25519_fe51_mul121666
301.type	x25519_fe51_mul121666,@function
302
303.align	5
304x25519_fe51_mul121666:
305	stdu	1,-144(1)
306	std	21,56(1)
307	std	22,64(1)
308	std	23,72(1)
309	std	24,80(1)
310	std	25,88(1)
311	std	26,96(1)
312	std	27,104(1)
313	std	28,112(1)
314	std	29,120(1)
315	std	30,128(1)
316	std	31,136(1)
317
318	lis	6,1
319	ori	6,6,56130
320	ld	7,0(4)
321	ld	8,8(4)
322	ld	9,16(4)
323	ld	10,24(4)
324	ld	11,32(4)
325
326	mulld	22,7,6
327	mulhdu	23,7,6
328	mulld	24,8,6
329	mulhdu	25,8,6
330	mulld	26,9,6
331	mulhdu	27,9,6
332	mulld	28,10,6
333	mulhdu	29,10,6
334	mulld	30,11,6
335	mulhdu	31,11,6
336
337	b	.Lfe51_reduce
338.long	0
339.byte	0,12,4,0,0x80,11,2,0
340.long	0
341
342