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