Deleted Added
full compact
rsaz-avx2.S (305153) rsaz-avx2.S (326663)
1/* $FreeBSD: stable/11/secure/lib/libcrypto/amd64/rsaz-avx2.S 305153 2016-08-31 20:33:59Z jkim $ */
1/* $FreeBSD: stable/11/secure/lib/libcrypto/amd64/rsaz-avx2.S 326663 2017-12-07 18:04:48Z jkim $ */
2/* Do not modify. This file is auto-generated from rsaz-avx2.pl. */
3.text
4
5.globl rsaz_1024_sqr_avx2
6.type rsaz_1024_sqr_avx2,@function
7.align 64
8rsaz_1024_sqr_avx2:
9 leaq (%rsp),%rax
10 pushq %rbx
11 pushq %rbp
12 pushq %r12
13 pushq %r13
14 pushq %r14
15 pushq %r15
16 vzeroupper
17 movq %rax,%rbp
18 movq %rdx,%r13
19 subq $832,%rsp
20 movq %r13,%r15
21 subq $-128,%rdi
22 subq $-128,%rsi
23 subq $-128,%r13
24
25 andq $4095,%r15
26 addq $320,%r15
27 shrq $12,%r15
28 vpxor %ymm9,%ymm9,%ymm9
29 jz .Lsqr_1024_no_n_copy
30
31
32
33
34
35 subq $320,%rsp
36 vmovdqu 0-128(%r13),%ymm0
37 andq $-2048,%rsp
38 vmovdqu 32-128(%r13),%ymm1
39 vmovdqu 64-128(%r13),%ymm2
40 vmovdqu 96-128(%r13),%ymm3
41 vmovdqu 128-128(%r13),%ymm4
42 vmovdqu 160-128(%r13),%ymm5
43 vmovdqu 192-128(%r13),%ymm6
44 vmovdqu 224-128(%r13),%ymm7
45 vmovdqu 256-128(%r13),%ymm8
46 leaq 832+128(%rsp),%r13
47 vmovdqu %ymm0,0-128(%r13)
48 vmovdqu %ymm1,32-128(%r13)
49 vmovdqu %ymm2,64-128(%r13)
50 vmovdqu %ymm3,96-128(%r13)
51 vmovdqu %ymm4,128-128(%r13)
52 vmovdqu %ymm5,160-128(%r13)
53 vmovdqu %ymm6,192-128(%r13)
54 vmovdqu %ymm7,224-128(%r13)
55 vmovdqu %ymm8,256-128(%r13)
56 vmovdqu %ymm9,288-128(%r13)
57
58.Lsqr_1024_no_n_copy:
59 andq $-1024,%rsp
60
61 vmovdqu 32-128(%rsi),%ymm1
62 vmovdqu 64-128(%rsi),%ymm2
63 vmovdqu 96-128(%rsi),%ymm3
64 vmovdqu 128-128(%rsi),%ymm4
65 vmovdqu 160-128(%rsi),%ymm5
66 vmovdqu 192-128(%rsi),%ymm6
67 vmovdqu 224-128(%rsi),%ymm7
68 vmovdqu 256-128(%rsi),%ymm8
69
70 leaq 192(%rsp),%rbx
2/* Do not modify. This file is auto-generated from rsaz-avx2.pl. */
3.text
4
5.globl rsaz_1024_sqr_avx2
6.type rsaz_1024_sqr_avx2,@function
7.align 64
8rsaz_1024_sqr_avx2:
9 leaq (%rsp),%rax
10 pushq %rbx
11 pushq %rbp
12 pushq %r12
13 pushq %r13
14 pushq %r14
15 pushq %r15
16 vzeroupper
17 movq %rax,%rbp
18 movq %rdx,%r13
19 subq $832,%rsp
20 movq %r13,%r15
21 subq $-128,%rdi
22 subq $-128,%rsi
23 subq $-128,%r13
24
25 andq $4095,%r15
26 addq $320,%r15
27 shrq $12,%r15
28 vpxor %ymm9,%ymm9,%ymm9
29 jz .Lsqr_1024_no_n_copy
30
31
32
33
34
35 subq $320,%rsp
36 vmovdqu 0-128(%r13),%ymm0
37 andq $-2048,%rsp
38 vmovdqu 32-128(%r13),%ymm1
39 vmovdqu 64-128(%r13),%ymm2
40 vmovdqu 96-128(%r13),%ymm3
41 vmovdqu 128-128(%r13),%ymm4
42 vmovdqu 160-128(%r13),%ymm5
43 vmovdqu 192-128(%r13),%ymm6
44 vmovdqu 224-128(%r13),%ymm7
45 vmovdqu 256-128(%r13),%ymm8
46 leaq 832+128(%rsp),%r13
47 vmovdqu %ymm0,0-128(%r13)
48 vmovdqu %ymm1,32-128(%r13)
49 vmovdqu %ymm2,64-128(%r13)
50 vmovdqu %ymm3,96-128(%r13)
51 vmovdqu %ymm4,128-128(%r13)
52 vmovdqu %ymm5,160-128(%r13)
53 vmovdqu %ymm6,192-128(%r13)
54 vmovdqu %ymm7,224-128(%r13)
55 vmovdqu %ymm8,256-128(%r13)
56 vmovdqu %ymm9,288-128(%r13)
57
58.Lsqr_1024_no_n_copy:
59 andq $-1024,%rsp
60
61 vmovdqu 32-128(%rsi),%ymm1
62 vmovdqu 64-128(%rsi),%ymm2
63 vmovdqu 96-128(%rsi),%ymm3
64 vmovdqu 128-128(%rsi),%ymm4
65 vmovdqu 160-128(%rsi),%ymm5
66 vmovdqu 192-128(%rsi),%ymm6
67 vmovdqu 224-128(%rsi),%ymm7
68 vmovdqu 256-128(%rsi),%ymm8
69
70 leaq 192(%rsp),%rbx
71 vpbroadcastq .Land_mask(%rip),%ymm15
71 vmovdqu .Land_mask(%rip),%ymm15
72 jmp .LOOP_GRANDE_SQR_1024
73
74.align 32
75.LOOP_GRANDE_SQR_1024:
76 leaq 576+128(%rsp),%r9
77 leaq 448(%rsp),%r12
78
79
80
81
82 vpaddq %ymm1,%ymm1,%ymm1
83 vpbroadcastq 0-128(%rsi),%ymm10
84 vpaddq %ymm2,%ymm2,%ymm2
85 vmovdqa %ymm1,0-128(%r9)
86 vpaddq %ymm3,%ymm3,%ymm3
87 vmovdqa %ymm2,32-128(%r9)
88 vpaddq %ymm4,%ymm4,%ymm4
89 vmovdqa %ymm3,64-128(%r9)
90 vpaddq %ymm5,%ymm5,%ymm5
91 vmovdqa %ymm4,96-128(%r9)
92 vpaddq %ymm6,%ymm6,%ymm6
93 vmovdqa %ymm5,128-128(%r9)
94 vpaddq %ymm7,%ymm7,%ymm7
95 vmovdqa %ymm6,160-128(%r9)
96 vpaddq %ymm8,%ymm8,%ymm8
97 vmovdqa %ymm7,192-128(%r9)
98 vpxor %ymm9,%ymm9,%ymm9
99 vmovdqa %ymm8,224-128(%r9)
100
101 vpmuludq 0-128(%rsi),%ymm10,%ymm0
102 vpbroadcastq 32-128(%rsi),%ymm11
103 vmovdqu %ymm9,288-192(%rbx)
104 vpmuludq %ymm10,%ymm1,%ymm1
105 vmovdqu %ymm9,320-448(%r12)
106 vpmuludq %ymm10,%ymm2,%ymm2
107 vmovdqu %ymm9,352-448(%r12)
108 vpmuludq %ymm10,%ymm3,%ymm3
109 vmovdqu %ymm9,384-448(%r12)
110 vpmuludq %ymm10,%ymm4,%ymm4
111 vmovdqu %ymm9,416-448(%r12)
112 vpmuludq %ymm10,%ymm5,%ymm5
113 vmovdqu %ymm9,448-448(%r12)
114 vpmuludq %ymm10,%ymm6,%ymm6
115 vmovdqu %ymm9,480-448(%r12)
116 vpmuludq %ymm10,%ymm7,%ymm7
117 vmovdqu %ymm9,512-448(%r12)
118 vpmuludq %ymm10,%ymm8,%ymm8
119 vpbroadcastq 64-128(%rsi),%ymm10
120 vmovdqu %ymm9,544-448(%r12)
121
122 movq %rsi,%r15
123 movl $4,%r14d
124 jmp .Lsqr_entry_1024
125.align 32
126.LOOP_SQR_1024:
127 vpbroadcastq 32-128(%r15),%ymm11
128 vpmuludq 0-128(%rsi),%ymm10,%ymm0
129 vpaddq 0-192(%rbx),%ymm0,%ymm0
130 vpmuludq 0-128(%r9),%ymm10,%ymm1
131 vpaddq 32-192(%rbx),%ymm1,%ymm1
132 vpmuludq 32-128(%r9),%ymm10,%ymm2
133 vpaddq 64-192(%rbx),%ymm2,%ymm2
134 vpmuludq 64-128(%r9),%ymm10,%ymm3
135 vpaddq 96-192(%rbx),%ymm3,%ymm3
136 vpmuludq 96-128(%r9),%ymm10,%ymm4
137 vpaddq 128-192(%rbx),%ymm4,%ymm4
138 vpmuludq 128-128(%r9),%ymm10,%ymm5
139 vpaddq 160-192(%rbx),%ymm5,%ymm5
140 vpmuludq 160-128(%r9),%ymm10,%ymm6
141 vpaddq 192-192(%rbx),%ymm6,%ymm6
142 vpmuludq 192-128(%r9),%ymm10,%ymm7
143 vpaddq 224-192(%rbx),%ymm7,%ymm7
144 vpmuludq 224-128(%r9),%ymm10,%ymm8
145 vpbroadcastq 64-128(%r15),%ymm10
146 vpaddq 256-192(%rbx),%ymm8,%ymm8
147.Lsqr_entry_1024:
148 vmovdqu %ymm0,0-192(%rbx)
149 vmovdqu %ymm1,32-192(%rbx)
150
151 vpmuludq 32-128(%rsi),%ymm11,%ymm12
152 vpaddq %ymm12,%ymm2,%ymm2
153 vpmuludq 32-128(%r9),%ymm11,%ymm14
154 vpaddq %ymm14,%ymm3,%ymm3
155 vpmuludq 64-128(%r9),%ymm11,%ymm13
156 vpaddq %ymm13,%ymm4,%ymm4
157 vpmuludq 96-128(%r9),%ymm11,%ymm12
158 vpaddq %ymm12,%ymm5,%ymm5
159 vpmuludq 128-128(%r9),%ymm11,%ymm14
160 vpaddq %ymm14,%ymm6,%ymm6
161 vpmuludq 160-128(%r9),%ymm11,%ymm13
162 vpaddq %ymm13,%ymm7,%ymm7
163 vpmuludq 192-128(%r9),%ymm11,%ymm12
164 vpaddq %ymm12,%ymm8,%ymm8
165 vpmuludq 224-128(%r9),%ymm11,%ymm0
166 vpbroadcastq 96-128(%r15),%ymm11
167 vpaddq 288-192(%rbx),%ymm0,%ymm0
168
169 vmovdqu %ymm2,64-192(%rbx)
170 vmovdqu %ymm3,96-192(%rbx)
171
172 vpmuludq 64-128(%rsi),%ymm10,%ymm13
173 vpaddq %ymm13,%ymm4,%ymm4
174 vpmuludq 64-128(%r9),%ymm10,%ymm12
175 vpaddq %ymm12,%ymm5,%ymm5
176 vpmuludq 96-128(%r9),%ymm10,%ymm14
177 vpaddq %ymm14,%ymm6,%ymm6
178 vpmuludq 128-128(%r9),%ymm10,%ymm13
179 vpaddq %ymm13,%ymm7,%ymm7
180 vpmuludq 160-128(%r9),%ymm10,%ymm12
181 vpaddq %ymm12,%ymm8,%ymm8
182 vpmuludq 192-128(%r9),%ymm10,%ymm14
183 vpaddq %ymm14,%ymm0,%ymm0
184 vpmuludq 224-128(%r9),%ymm10,%ymm1
185 vpbroadcastq 128-128(%r15),%ymm10
186 vpaddq 320-448(%r12),%ymm1,%ymm1
187
188 vmovdqu %ymm4,128-192(%rbx)
189 vmovdqu %ymm5,160-192(%rbx)
190
191 vpmuludq 96-128(%rsi),%ymm11,%ymm12
192 vpaddq %ymm12,%ymm6,%ymm6
193 vpmuludq 96-128(%r9),%ymm11,%ymm14
194 vpaddq %ymm14,%ymm7,%ymm7
195 vpmuludq 128-128(%r9),%ymm11,%ymm13
196 vpaddq %ymm13,%ymm8,%ymm8
197 vpmuludq 160-128(%r9),%ymm11,%ymm12
198 vpaddq %ymm12,%ymm0,%ymm0
199 vpmuludq 192-128(%r9),%ymm11,%ymm14
200 vpaddq %ymm14,%ymm1,%ymm1
201 vpmuludq 224-128(%r9),%ymm11,%ymm2
202 vpbroadcastq 160-128(%r15),%ymm11
203 vpaddq 352-448(%r12),%ymm2,%ymm2
204
205 vmovdqu %ymm6,192-192(%rbx)
206 vmovdqu %ymm7,224-192(%rbx)
207
208 vpmuludq 128-128(%rsi),%ymm10,%ymm12
209 vpaddq %ymm12,%ymm8,%ymm8
210 vpmuludq 128-128(%r9),%ymm10,%ymm14
211 vpaddq %ymm14,%ymm0,%ymm0
212 vpmuludq 160-128(%r9),%ymm10,%ymm13
213 vpaddq %ymm13,%ymm1,%ymm1
214 vpmuludq 192-128(%r9),%ymm10,%ymm12
215 vpaddq %ymm12,%ymm2,%ymm2
216 vpmuludq 224-128(%r9),%ymm10,%ymm3
217 vpbroadcastq 192-128(%r15),%ymm10
218 vpaddq 384-448(%r12),%ymm3,%ymm3
219
220 vmovdqu %ymm8,256-192(%rbx)
221 vmovdqu %ymm0,288-192(%rbx)
222 leaq 8(%rbx),%rbx
223
224 vpmuludq 160-128(%rsi),%ymm11,%ymm13
225 vpaddq %ymm13,%ymm1,%ymm1
226 vpmuludq 160-128(%r9),%ymm11,%ymm12
227 vpaddq %ymm12,%ymm2,%ymm2
228 vpmuludq 192-128(%r9),%ymm11,%ymm14
229 vpaddq %ymm14,%ymm3,%ymm3
230 vpmuludq 224-128(%r9),%ymm11,%ymm4
231 vpbroadcastq 224-128(%r15),%ymm11
232 vpaddq 416-448(%r12),%ymm4,%ymm4
233
234 vmovdqu %ymm1,320-448(%r12)
235 vmovdqu %ymm2,352-448(%r12)
236
237 vpmuludq 192-128(%rsi),%ymm10,%ymm12
238 vpaddq %ymm12,%ymm3,%ymm3
239 vpmuludq 192-128(%r9),%ymm10,%ymm14
240 vpbroadcastq 256-128(%r15),%ymm0
241 vpaddq %ymm14,%ymm4,%ymm4
242 vpmuludq 224-128(%r9),%ymm10,%ymm5
243 vpbroadcastq 0+8-128(%r15),%ymm10
244 vpaddq 448-448(%r12),%ymm5,%ymm5
245
246 vmovdqu %ymm3,384-448(%r12)
247 vmovdqu %ymm4,416-448(%r12)
248 leaq 8(%r15),%r15
249
250 vpmuludq 224-128(%rsi),%ymm11,%ymm12
251 vpaddq %ymm12,%ymm5,%ymm5
252 vpmuludq 224-128(%r9),%ymm11,%ymm6
253 vpaddq 480-448(%r12),%ymm6,%ymm6
254
255 vpmuludq 256-128(%rsi),%ymm0,%ymm7
256 vmovdqu %ymm5,448-448(%r12)
257 vpaddq 512-448(%r12),%ymm7,%ymm7
258 vmovdqu %ymm6,480-448(%r12)
259 vmovdqu %ymm7,512-448(%r12)
260 leaq 8(%r12),%r12
261
262 decl %r14d
263 jnz .LOOP_SQR_1024
264
265 vmovdqu 256(%rsp),%ymm8
266 vmovdqu 288(%rsp),%ymm1
267 vmovdqu 320(%rsp),%ymm2
268 leaq 192(%rsp),%rbx
269
270 vpsrlq $29,%ymm8,%ymm14
271 vpand %ymm15,%ymm8,%ymm8
272 vpsrlq $29,%ymm1,%ymm11
273 vpand %ymm15,%ymm1,%ymm1
274
275 vpermq $0x93,%ymm14,%ymm14
276 vpxor %ymm9,%ymm9,%ymm9
277 vpermq $0x93,%ymm11,%ymm11
278
279 vpblendd $3,%ymm9,%ymm14,%ymm10
280 vpblendd $3,%ymm14,%ymm11,%ymm14
281 vpaddq %ymm10,%ymm8,%ymm8
282 vpblendd $3,%ymm11,%ymm9,%ymm11
283 vpaddq %ymm14,%ymm1,%ymm1
284 vpaddq %ymm11,%ymm2,%ymm2
285 vmovdqu %ymm1,288-192(%rbx)
286 vmovdqu %ymm2,320-192(%rbx)
287
288 movq (%rsp),%rax
289 movq 8(%rsp),%r10
290 movq 16(%rsp),%r11
291 movq 24(%rsp),%r12
292 vmovdqu 32(%rsp),%ymm1
293 vmovdqu 64-192(%rbx),%ymm2
294 vmovdqu 96-192(%rbx),%ymm3
295 vmovdqu 128-192(%rbx),%ymm4
296 vmovdqu 160-192(%rbx),%ymm5
297 vmovdqu 192-192(%rbx),%ymm6
298 vmovdqu 224-192(%rbx),%ymm7
299
300 movq %rax,%r9
301 imull %ecx,%eax
302 andl $0x1fffffff,%eax
303 vmovd %eax,%xmm12
304
305 movq %rax,%rdx
306 imulq -128(%r13),%rax
307 vpbroadcastq %xmm12,%ymm12
308 addq %rax,%r9
309 movq %rdx,%rax
310 imulq 8-128(%r13),%rax
311 shrq $29,%r9
312 addq %rax,%r10
313 movq %rdx,%rax
314 imulq 16-128(%r13),%rax
315 addq %r9,%r10
316 addq %rax,%r11
317 imulq 24-128(%r13),%rdx
318 addq %rdx,%r12
319
320 movq %r10,%rax
321 imull %ecx,%eax
322 andl $0x1fffffff,%eax
323
324 movl $9,%r14d
325 jmp .LOOP_REDUCE_1024
326
327.align 32
328.LOOP_REDUCE_1024:
329 vmovd %eax,%xmm13
330 vpbroadcastq %xmm13,%ymm13
331
332 vpmuludq 32-128(%r13),%ymm12,%ymm10
333 movq %rax,%rdx
334 imulq -128(%r13),%rax
335 vpaddq %ymm10,%ymm1,%ymm1
336 addq %rax,%r10
337 vpmuludq 64-128(%r13),%ymm12,%ymm14
338 movq %rdx,%rax
339 imulq 8-128(%r13),%rax
340 vpaddq %ymm14,%ymm2,%ymm2
341 vpmuludq 96-128(%r13),%ymm12,%ymm11
342.byte 0x67
343 addq %rax,%r11
344.byte 0x67
345 movq %rdx,%rax
346 imulq 16-128(%r13),%rax
347 shrq $29,%r10
348 vpaddq %ymm11,%ymm3,%ymm3
349 vpmuludq 128-128(%r13),%ymm12,%ymm10
350 addq %rax,%r12
351 addq %r10,%r11
352 vpaddq %ymm10,%ymm4,%ymm4
353 vpmuludq 160-128(%r13),%ymm12,%ymm14
354 movq %r11,%rax
355 imull %ecx,%eax
356 vpaddq %ymm14,%ymm5,%ymm5
357 vpmuludq 192-128(%r13),%ymm12,%ymm11
358 andl $0x1fffffff,%eax
359 vpaddq %ymm11,%ymm6,%ymm6
360 vpmuludq 224-128(%r13),%ymm12,%ymm10
361 vpaddq %ymm10,%ymm7,%ymm7
362 vpmuludq 256-128(%r13),%ymm12,%ymm14
363 vmovd %eax,%xmm12
364
365 vpaddq %ymm14,%ymm8,%ymm8
366
367 vpbroadcastq %xmm12,%ymm12
368
369 vpmuludq 32-8-128(%r13),%ymm13,%ymm11
370 vmovdqu 96-8-128(%r13),%ymm14
371 movq %rax,%rdx
372 imulq -128(%r13),%rax
373 vpaddq %ymm11,%ymm1,%ymm1
374 vpmuludq 64-8-128(%r13),%ymm13,%ymm10
375 vmovdqu 128-8-128(%r13),%ymm11
376 addq %rax,%r11
377 movq %rdx,%rax
378 imulq 8-128(%r13),%rax
379 vpaddq %ymm10,%ymm2,%ymm2
380 addq %r12,%rax
381 shrq $29,%r11
382 vpmuludq %ymm13,%ymm14,%ymm14
383 vmovdqu 160-8-128(%r13),%ymm10
384 addq %r11,%rax
385 vpaddq %ymm14,%ymm3,%ymm3
386 vpmuludq %ymm13,%ymm11,%ymm11
387 vmovdqu 192-8-128(%r13),%ymm14
388.byte 0x67
389 movq %rax,%r12
390 imull %ecx,%eax
391 vpaddq %ymm11,%ymm4,%ymm4
392 vpmuludq %ymm13,%ymm10,%ymm10
393.byte 0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00
394 andl $0x1fffffff,%eax
395 vpaddq %ymm10,%ymm5,%ymm5
396 vpmuludq %ymm13,%ymm14,%ymm14
397 vmovdqu 256-8-128(%r13),%ymm10
398 vpaddq %ymm14,%ymm6,%ymm6
399 vpmuludq %ymm13,%ymm11,%ymm11
400 vmovdqu 288-8-128(%r13),%ymm9
401 vmovd %eax,%xmm0
402 imulq -128(%r13),%rax
403 vpaddq %ymm11,%ymm7,%ymm7
404 vpmuludq %ymm13,%ymm10,%ymm10
405 vmovdqu 32-16-128(%r13),%ymm14
406 vpbroadcastq %xmm0,%ymm0
407 vpaddq %ymm10,%ymm8,%ymm8
408 vpmuludq %ymm13,%ymm9,%ymm9
409 vmovdqu 64-16-128(%r13),%ymm11
410 addq %rax,%r12
411
412 vmovdqu 32-24-128(%r13),%ymm13
413 vpmuludq %ymm12,%ymm14,%ymm14
414 vmovdqu 96-16-128(%r13),%ymm10
415 vpaddq %ymm14,%ymm1,%ymm1
416 vpmuludq %ymm0,%ymm13,%ymm13
417 vpmuludq %ymm12,%ymm11,%ymm11
418.byte 0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff
419 vpaddq %ymm1,%ymm13,%ymm13
420 vpaddq %ymm11,%ymm2,%ymm2
421 vpmuludq %ymm12,%ymm10,%ymm10
422 vmovdqu 160-16-128(%r13),%ymm11
423.byte 0x67
424 vmovq %xmm13,%rax
425 vmovdqu %ymm13,(%rsp)
426 vpaddq %ymm10,%ymm3,%ymm3
427 vpmuludq %ymm12,%ymm14,%ymm14
428 vmovdqu 192-16-128(%r13),%ymm10
429 vpaddq %ymm14,%ymm4,%ymm4
430 vpmuludq %ymm12,%ymm11,%ymm11
431 vmovdqu 224-16-128(%r13),%ymm14
432 vpaddq %ymm11,%ymm5,%ymm5
433 vpmuludq %ymm12,%ymm10,%ymm10
434 vmovdqu 256-16-128(%r13),%ymm11
435 vpaddq %ymm10,%ymm6,%ymm6
436 vpmuludq %ymm12,%ymm14,%ymm14
437 shrq $29,%r12
438 vmovdqu 288-16-128(%r13),%ymm10
439 addq %r12,%rax
440 vpaddq %ymm14,%ymm7,%ymm7
441 vpmuludq %ymm12,%ymm11,%ymm11
442
443 movq %rax,%r9
444 imull %ecx,%eax
445 vpaddq %ymm11,%ymm8,%ymm8
446 vpmuludq %ymm12,%ymm10,%ymm10
447 andl $0x1fffffff,%eax
448 vmovd %eax,%xmm12
449 vmovdqu 96-24-128(%r13),%ymm11
450.byte 0x67
451 vpaddq %ymm10,%ymm9,%ymm9
452 vpbroadcastq %xmm12,%ymm12
453
454 vpmuludq 64-24-128(%r13),%ymm0,%ymm14
455 vmovdqu 128-24-128(%r13),%ymm10
456 movq %rax,%rdx
457 imulq -128(%r13),%rax
458 movq 8(%rsp),%r10
459 vpaddq %ymm14,%ymm2,%ymm1
460 vpmuludq %ymm0,%ymm11,%ymm11
461 vmovdqu 160-24-128(%r13),%ymm14
462 addq %rax,%r9
463 movq %rdx,%rax
464 imulq 8-128(%r13),%rax
465.byte 0x67
466 shrq $29,%r9
467 movq 16(%rsp),%r11
468 vpaddq %ymm11,%ymm3,%ymm2
469 vpmuludq %ymm0,%ymm10,%ymm10
470 vmovdqu 192-24-128(%r13),%ymm11
471 addq %rax,%r10
472 movq %rdx,%rax
473 imulq 16-128(%r13),%rax
474 vpaddq %ymm10,%ymm4,%ymm3
475 vpmuludq %ymm0,%ymm14,%ymm14
476 vmovdqu 224-24-128(%r13),%ymm10
477 imulq 24-128(%r13),%rdx
478 addq %rax,%r11
479 leaq (%r9,%r10,1),%rax
480 vpaddq %ymm14,%ymm5,%ymm4
481 vpmuludq %ymm0,%ymm11,%ymm11
482 vmovdqu 256-24-128(%r13),%ymm14
483 movq %rax,%r10
484 imull %ecx,%eax
485 vpmuludq %ymm0,%ymm10,%ymm10
486 vpaddq %ymm11,%ymm6,%ymm5
487 vmovdqu 288-24-128(%r13),%ymm11
488 andl $0x1fffffff,%eax
489 vpaddq %ymm10,%ymm7,%ymm6
490 vpmuludq %ymm0,%ymm14,%ymm14
491 addq 24(%rsp),%rdx
492 vpaddq %ymm14,%ymm8,%ymm7
493 vpmuludq %ymm0,%ymm11,%ymm11
494 vpaddq %ymm11,%ymm9,%ymm8
495 vmovq %r12,%xmm9
496 movq %rdx,%r12
497
498 decl %r14d
499 jnz .LOOP_REDUCE_1024
500 leaq 448(%rsp),%r12
501 vpaddq %ymm9,%ymm13,%ymm0
502 vpxor %ymm9,%ymm9,%ymm9
503
504 vpaddq 288-192(%rbx),%ymm0,%ymm0
505 vpaddq 320-448(%r12),%ymm1,%ymm1
506 vpaddq 352-448(%r12),%ymm2,%ymm2
507 vpaddq 384-448(%r12),%ymm3,%ymm3
508 vpaddq 416-448(%r12),%ymm4,%ymm4
509 vpaddq 448-448(%r12),%ymm5,%ymm5
510 vpaddq 480-448(%r12),%ymm6,%ymm6
511 vpaddq 512-448(%r12),%ymm7,%ymm7
512 vpaddq 544-448(%r12),%ymm8,%ymm8
513
514 vpsrlq $29,%ymm0,%ymm14
515 vpand %ymm15,%ymm0,%ymm0
516 vpsrlq $29,%ymm1,%ymm11
517 vpand %ymm15,%ymm1,%ymm1
518 vpsrlq $29,%ymm2,%ymm12
519 vpermq $0x93,%ymm14,%ymm14
520 vpand %ymm15,%ymm2,%ymm2
521 vpsrlq $29,%ymm3,%ymm13
522 vpermq $0x93,%ymm11,%ymm11
523 vpand %ymm15,%ymm3,%ymm3
524 vpermq $0x93,%ymm12,%ymm12
525
526 vpblendd $3,%ymm9,%ymm14,%ymm10
527 vpermq $0x93,%ymm13,%ymm13
528 vpblendd $3,%ymm14,%ymm11,%ymm14
529 vpaddq %ymm10,%ymm0,%ymm0
530 vpblendd $3,%ymm11,%ymm12,%ymm11
531 vpaddq %ymm14,%ymm1,%ymm1
532 vpblendd $3,%ymm12,%ymm13,%ymm12
533 vpaddq %ymm11,%ymm2,%ymm2
534 vpblendd $3,%ymm13,%ymm9,%ymm13
535 vpaddq %ymm12,%ymm3,%ymm3
536 vpaddq %ymm13,%ymm4,%ymm4
537
538 vpsrlq $29,%ymm0,%ymm14
539 vpand %ymm15,%ymm0,%ymm0
540 vpsrlq $29,%ymm1,%ymm11
541 vpand %ymm15,%ymm1,%ymm1
542 vpsrlq $29,%ymm2,%ymm12
543 vpermq $0x93,%ymm14,%ymm14
544 vpand %ymm15,%ymm2,%ymm2
545 vpsrlq $29,%ymm3,%ymm13
546 vpermq $0x93,%ymm11,%ymm11
547 vpand %ymm15,%ymm3,%ymm3
548 vpermq $0x93,%ymm12,%ymm12
549
550 vpblendd $3,%ymm9,%ymm14,%ymm10
551 vpermq $0x93,%ymm13,%ymm13
552 vpblendd $3,%ymm14,%ymm11,%ymm14
553 vpaddq %ymm10,%ymm0,%ymm0
554 vpblendd $3,%ymm11,%ymm12,%ymm11
555 vpaddq %ymm14,%ymm1,%ymm1
556 vmovdqu %ymm0,0-128(%rdi)
557 vpblendd $3,%ymm12,%ymm13,%ymm12
558 vpaddq %ymm11,%ymm2,%ymm2
559 vmovdqu %ymm1,32-128(%rdi)
560 vpblendd $3,%ymm13,%ymm9,%ymm13
561 vpaddq %ymm12,%ymm3,%ymm3
562 vmovdqu %ymm2,64-128(%rdi)
563 vpaddq %ymm13,%ymm4,%ymm4
564 vmovdqu %ymm3,96-128(%rdi)
565 vpsrlq $29,%ymm4,%ymm14
566 vpand %ymm15,%ymm4,%ymm4
567 vpsrlq $29,%ymm5,%ymm11
568 vpand %ymm15,%ymm5,%ymm5
569 vpsrlq $29,%ymm6,%ymm12
570 vpermq $0x93,%ymm14,%ymm14
571 vpand %ymm15,%ymm6,%ymm6
572 vpsrlq $29,%ymm7,%ymm13
573 vpermq $0x93,%ymm11,%ymm11
574 vpand %ymm15,%ymm7,%ymm7
575 vpsrlq $29,%ymm8,%ymm0
576 vpermq $0x93,%ymm12,%ymm12
577 vpand %ymm15,%ymm8,%ymm8
578 vpermq $0x93,%ymm13,%ymm13
579
580 vpblendd $3,%ymm9,%ymm14,%ymm10
581 vpermq $0x93,%ymm0,%ymm0
582 vpblendd $3,%ymm14,%ymm11,%ymm14
583 vpaddq %ymm10,%ymm4,%ymm4
584 vpblendd $3,%ymm11,%ymm12,%ymm11
585 vpaddq %ymm14,%ymm5,%ymm5
586 vpblendd $3,%ymm12,%ymm13,%ymm12
587 vpaddq %ymm11,%ymm6,%ymm6
588 vpblendd $3,%ymm13,%ymm0,%ymm13
589 vpaddq %ymm12,%ymm7,%ymm7
590 vpaddq %ymm13,%ymm8,%ymm8
591
592 vpsrlq $29,%ymm4,%ymm14
593 vpand %ymm15,%ymm4,%ymm4
594 vpsrlq $29,%ymm5,%ymm11
595 vpand %ymm15,%ymm5,%ymm5
596 vpsrlq $29,%ymm6,%ymm12
597 vpermq $0x93,%ymm14,%ymm14
598 vpand %ymm15,%ymm6,%ymm6
599 vpsrlq $29,%ymm7,%ymm13
600 vpermq $0x93,%ymm11,%ymm11
601 vpand %ymm15,%ymm7,%ymm7
602 vpsrlq $29,%ymm8,%ymm0
603 vpermq $0x93,%ymm12,%ymm12
604 vpand %ymm15,%ymm8,%ymm8
605 vpermq $0x93,%ymm13,%ymm13
606
607 vpblendd $3,%ymm9,%ymm14,%ymm10
608 vpermq $0x93,%ymm0,%ymm0
609 vpblendd $3,%ymm14,%ymm11,%ymm14
610 vpaddq %ymm10,%ymm4,%ymm4
611 vpblendd $3,%ymm11,%ymm12,%ymm11
612 vpaddq %ymm14,%ymm5,%ymm5
613 vmovdqu %ymm4,128-128(%rdi)
614 vpblendd $3,%ymm12,%ymm13,%ymm12
615 vpaddq %ymm11,%ymm6,%ymm6
616 vmovdqu %ymm5,160-128(%rdi)
617 vpblendd $3,%ymm13,%ymm0,%ymm13
618 vpaddq %ymm12,%ymm7,%ymm7
619 vmovdqu %ymm6,192-128(%rdi)
620 vpaddq %ymm13,%ymm8,%ymm8
621 vmovdqu %ymm7,224-128(%rdi)
622 vmovdqu %ymm8,256-128(%rdi)
623
624 movq %rdi,%rsi
625 decl %r8d
626 jne .LOOP_GRANDE_SQR_1024
627
628 vzeroall
629 movq %rbp,%rax
630 movq -48(%rax),%r15
631 movq -40(%rax),%r14
632 movq -32(%rax),%r13
633 movq -24(%rax),%r12
634 movq -16(%rax),%rbp
635 movq -8(%rax),%rbx
636 leaq (%rax),%rsp
637.Lsqr_1024_epilogue:
638 .byte 0xf3,0xc3
639.size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
640.globl rsaz_1024_mul_avx2
641.type rsaz_1024_mul_avx2,@function
642.align 64
643rsaz_1024_mul_avx2:
644 leaq (%rsp),%rax
645 pushq %rbx
646 pushq %rbp
647 pushq %r12
648 pushq %r13
649 pushq %r14
650 pushq %r15
651 movq %rax,%rbp
652 vzeroall
653 movq %rdx,%r13
654 subq $64,%rsp
655
656
657
658
659
660
661.byte 0x67,0x67
662 movq %rsi,%r15
663 andq $4095,%r15
664 addq $320,%r15
665 shrq $12,%r15
666 movq %rsi,%r15
667 cmovnzq %r13,%rsi
668 cmovnzq %r15,%r13
669
670 movq %rcx,%r15
671 subq $-128,%rsi
672 subq $-128,%rcx
673 subq $-128,%rdi
674
675 andq $4095,%r15
676 addq $320,%r15
677.byte 0x67,0x67
678 shrq $12,%r15
679 jz .Lmul_1024_no_n_copy
680
681
682
683
684
685 subq $320,%rsp
686 vmovdqu 0-128(%rcx),%ymm0
687 andq $-512,%rsp
688 vmovdqu 32-128(%rcx),%ymm1
689 vmovdqu 64-128(%rcx),%ymm2
690 vmovdqu 96-128(%rcx),%ymm3
691 vmovdqu 128-128(%rcx),%ymm4
692 vmovdqu 160-128(%rcx),%ymm5
693 vmovdqu 192-128(%rcx),%ymm6
694 vmovdqu 224-128(%rcx),%ymm7
695 vmovdqu 256-128(%rcx),%ymm8
696 leaq 64+128(%rsp),%rcx
697 vmovdqu %ymm0,0-128(%rcx)
698 vpxor %ymm0,%ymm0,%ymm0
699 vmovdqu %ymm1,32-128(%rcx)
700 vpxor %ymm1,%ymm1,%ymm1
701 vmovdqu %ymm2,64-128(%rcx)
702 vpxor %ymm2,%ymm2,%ymm2
703 vmovdqu %ymm3,96-128(%rcx)
704 vpxor %ymm3,%ymm3,%ymm3
705 vmovdqu %ymm4,128-128(%rcx)
706 vpxor %ymm4,%ymm4,%ymm4
707 vmovdqu %ymm5,160-128(%rcx)
708 vpxor %ymm5,%ymm5,%ymm5
709 vmovdqu %ymm6,192-128(%rcx)
710 vpxor %ymm6,%ymm6,%ymm6
711 vmovdqu %ymm7,224-128(%rcx)
712 vpxor %ymm7,%ymm7,%ymm7
713 vmovdqu %ymm8,256-128(%rcx)
714 vmovdqa %ymm0,%ymm8
715 vmovdqu %ymm9,288-128(%rcx)
716.Lmul_1024_no_n_copy:
717 andq $-64,%rsp
718
719 movq (%r13),%rbx
720 vpbroadcastq (%r13),%ymm10
721 vmovdqu %ymm0,(%rsp)
722 xorq %r9,%r9
723.byte 0x67
724 xorq %r10,%r10
725 xorq %r11,%r11
726 xorq %r12,%r12
727
728 vmovdqu .Land_mask(%rip),%ymm15
729 movl $9,%r14d
730 vmovdqu %ymm9,288-128(%rdi)
731 jmp .Loop_mul_1024
732
733.align 32
734.Loop_mul_1024:
735 vpsrlq $29,%ymm3,%ymm9
736 movq %rbx,%rax
737 imulq -128(%rsi),%rax
738 addq %r9,%rax
739 movq %rbx,%r10
740 imulq 8-128(%rsi),%r10
741 addq 8(%rsp),%r10
742
743 movq %rax,%r9
744 imull %r8d,%eax
745 andl $0x1fffffff,%eax
746
747 movq %rbx,%r11
748 imulq 16-128(%rsi),%r11
749 addq 16(%rsp),%r11
750
751 movq %rbx,%r12
752 imulq 24-128(%rsi),%r12
753 addq 24(%rsp),%r12
754 vpmuludq 32-128(%rsi),%ymm10,%ymm0
755 vmovd %eax,%xmm11
756 vpaddq %ymm0,%ymm1,%ymm1
757 vpmuludq 64-128(%rsi),%ymm10,%ymm12
758 vpbroadcastq %xmm11,%ymm11
759 vpaddq %ymm12,%ymm2,%ymm2
760 vpmuludq 96-128(%rsi),%ymm10,%ymm13
761 vpand %ymm15,%ymm3,%ymm3
762 vpaddq %ymm13,%ymm3,%ymm3
763 vpmuludq 128-128(%rsi),%ymm10,%ymm0
764 vpaddq %ymm0,%ymm4,%ymm4
765 vpmuludq 160-128(%rsi),%ymm10,%ymm12
766 vpaddq %ymm12,%ymm5,%ymm5
767 vpmuludq 192-128(%rsi),%ymm10,%ymm13
768 vpaddq %ymm13,%ymm6,%ymm6
769 vpmuludq 224-128(%rsi),%ymm10,%ymm0
770 vpermq $0x93,%ymm9,%ymm9
771 vpaddq %ymm0,%ymm7,%ymm7
772 vpmuludq 256-128(%rsi),%ymm10,%ymm12
773 vpbroadcastq 8(%r13),%ymm10
774 vpaddq %ymm12,%ymm8,%ymm8
775
776 movq %rax,%rdx
777 imulq -128(%rcx),%rax
778 addq %rax,%r9
779 movq %rdx,%rax
780 imulq 8-128(%rcx),%rax
781 addq %rax,%r10
782 movq %rdx,%rax
783 imulq 16-128(%rcx),%rax
784 addq %rax,%r11
785 shrq $29,%r9
786 imulq 24-128(%rcx),%rdx
787 addq %rdx,%r12
788 addq %r9,%r10
789
790 vpmuludq 32-128(%rcx),%ymm11,%ymm13
791 vmovq %xmm10,%rbx
792 vpaddq %ymm13,%ymm1,%ymm1
793 vpmuludq 64-128(%rcx),%ymm11,%ymm0
794 vpaddq %ymm0,%ymm2,%ymm2
795 vpmuludq 96-128(%rcx),%ymm11,%ymm12
796 vpaddq %ymm12,%ymm3,%ymm3
797 vpmuludq 128-128(%rcx),%ymm11,%ymm13
798 vpaddq %ymm13,%ymm4,%ymm4
799 vpmuludq 160-128(%rcx),%ymm11,%ymm0
800 vpaddq %ymm0,%ymm5,%ymm5
801 vpmuludq 192-128(%rcx),%ymm11,%ymm12
802 vpaddq %ymm12,%ymm6,%ymm6
803 vpmuludq 224-128(%rcx),%ymm11,%ymm13
72 jmp .LOOP_GRANDE_SQR_1024
73
74.align 32
75.LOOP_GRANDE_SQR_1024:
76 leaq 576+128(%rsp),%r9
77 leaq 448(%rsp),%r12
78
79
80
81
82 vpaddq %ymm1,%ymm1,%ymm1
83 vpbroadcastq 0-128(%rsi),%ymm10
84 vpaddq %ymm2,%ymm2,%ymm2
85 vmovdqa %ymm1,0-128(%r9)
86 vpaddq %ymm3,%ymm3,%ymm3
87 vmovdqa %ymm2,32-128(%r9)
88 vpaddq %ymm4,%ymm4,%ymm4
89 vmovdqa %ymm3,64-128(%r9)
90 vpaddq %ymm5,%ymm5,%ymm5
91 vmovdqa %ymm4,96-128(%r9)
92 vpaddq %ymm6,%ymm6,%ymm6
93 vmovdqa %ymm5,128-128(%r9)
94 vpaddq %ymm7,%ymm7,%ymm7
95 vmovdqa %ymm6,160-128(%r9)
96 vpaddq %ymm8,%ymm8,%ymm8
97 vmovdqa %ymm7,192-128(%r9)
98 vpxor %ymm9,%ymm9,%ymm9
99 vmovdqa %ymm8,224-128(%r9)
100
101 vpmuludq 0-128(%rsi),%ymm10,%ymm0
102 vpbroadcastq 32-128(%rsi),%ymm11
103 vmovdqu %ymm9,288-192(%rbx)
104 vpmuludq %ymm10,%ymm1,%ymm1
105 vmovdqu %ymm9,320-448(%r12)
106 vpmuludq %ymm10,%ymm2,%ymm2
107 vmovdqu %ymm9,352-448(%r12)
108 vpmuludq %ymm10,%ymm3,%ymm3
109 vmovdqu %ymm9,384-448(%r12)
110 vpmuludq %ymm10,%ymm4,%ymm4
111 vmovdqu %ymm9,416-448(%r12)
112 vpmuludq %ymm10,%ymm5,%ymm5
113 vmovdqu %ymm9,448-448(%r12)
114 vpmuludq %ymm10,%ymm6,%ymm6
115 vmovdqu %ymm9,480-448(%r12)
116 vpmuludq %ymm10,%ymm7,%ymm7
117 vmovdqu %ymm9,512-448(%r12)
118 vpmuludq %ymm10,%ymm8,%ymm8
119 vpbroadcastq 64-128(%rsi),%ymm10
120 vmovdqu %ymm9,544-448(%r12)
121
122 movq %rsi,%r15
123 movl $4,%r14d
124 jmp .Lsqr_entry_1024
125.align 32
126.LOOP_SQR_1024:
127 vpbroadcastq 32-128(%r15),%ymm11
128 vpmuludq 0-128(%rsi),%ymm10,%ymm0
129 vpaddq 0-192(%rbx),%ymm0,%ymm0
130 vpmuludq 0-128(%r9),%ymm10,%ymm1
131 vpaddq 32-192(%rbx),%ymm1,%ymm1
132 vpmuludq 32-128(%r9),%ymm10,%ymm2
133 vpaddq 64-192(%rbx),%ymm2,%ymm2
134 vpmuludq 64-128(%r9),%ymm10,%ymm3
135 vpaddq 96-192(%rbx),%ymm3,%ymm3
136 vpmuludq 96-128(%r9),%ymm10,%ymm4
137 vpaddq 128-192(%rbx),%ymm4,%ymm4
138 vpmuludq 128-128(%r9),%ymm10,%ymm5
139 vpaddq 160-192(%rbx),%ymm5,%ymm5
140 vpmuludq 160-128(%r9),%ymm10,%ymm6
141 vpaddq 192-192(%rbx),%ymm6,%ymm6
142 vpmuludq 192-128(%r9),%ymm10,%ymm7
143 vpaddq 224-192(%rbx),%ymm7,%ymm7
144 vpmuludq 224-128(%r9),%ymm10,%ymm8
145 vpbroadcastq 64-128(%r15),%ymm10
146 vpaddq 256-192(%rbx),%ymm8,%ymm8
147.Lsqr_entry_1024:
148 vmovdqu %ymm0,0-192(%rbx)
149 vmovdqu %ymm1,32-192(%rbx)
150
151 vpmuludq 32-128(%rsi),%ymm11,%ymm12
152 vpaddq %ymm12,%ymm2,%ymm2
153 vpmuludq 32-128(%r9),%ymm11,%ymm14
154 vpaddq %ymm14,%ymm3,%ymm3
155 vpmuludq 64-128(%r9),%ymm11,%ymm13
156 vpaddq %ymm13,%ymm4,%ymm4
157 vpmuludq 96-128(%r9),%ymm11,%ymm12
158 vpaddq %ymm12,%ymm5,%ymm5
159 vpmuludq 128-128(%r9),%ymm11,%ymm14
160 vpaddq %ymm14,%ymm6,%ymm6
161 vpmuludq 160-128(%r9),%ymm11,%ymm13
162 vpaddq %ymm13,%ymm7,%ymm7
163 vpmuludq 192-128(%r9),%ymm11,%ymm12
164 vpaddq %ymm12,%ymm8,%ymm8
165 vpmuludq 224-128(%r9),%ymm11,%ymm0
166 vpbroadcastq 96-128(%r15),%ymm11
167 vpaddq 288-192(%rbx),%ymm0,%ymm0
168
169 vmovdqu %ymm2,64-192(%rbx)
170 vmovdqu %ymm3,96-192(%rbx)
171
172 vpmuludq 64-128(%rsi),%ymm10,%ymm13
173 vpaddq %ymm13,%ymm4,%ymm4
174 vpmuludq 64-128(%r9),%ymm10,%ymm12
175 vpaddq %ymm12,%ymm5,%ymm5
176 vpmuludq 96-128(%r9),%ymm10,%ymm14
177 vpaddq %ymm14,%ymm6,%ymm6
178 vpmuludq 128-128(%r9),%ymm10,%ymm13
179 vpaddq %ymm13,%ymm7,%ymm7
180 vpmuludq 160-128(%r9),%ymm10,%ymm12
181 vpaddq %ymm12,%ymm8,%ymm8
182 vpmuludq 192-128(%r9),%ymm10,%ymm14
183 vpaddq %ymm14,%ymm0,%ymm0
184 vpmuludq 224-128(%r9),%ymm10,%ymm1
185 vpbroadcastq 128-128(%r15),%ymm10
186 vpaddq 320-448(%r12),%ymm1,%ymm1
187
188 vmovdqu %ymm4,128-192(%rbx)
189 vmovdqu %ymm5,160-192(%rbx)
190
191 vpmuludq 96-128(%rsi),%ymm11,%ymm12
192 vpaddq %ymm12,%ymm6,%ymm6
193 vpmuludq 96-128(%r9),%ymm11,%ymm14
194 vpaddq %ymm14,%ymm7,%ymm7
195 vpmuludq 128-128(%r9),%ymm11,%ymm13
196 vpaddq %ymm13,%ymm8,%ymm8
197 vpmuludq 160-128(%r9),%ymm11,%ymm12
198 vpaddq %ymm12,%ymm0,%ymm0
199 vpmuludq 192-128(%r9),%ymm11,%ymm14
200 vpaddq %ymm14,%ymm1,%ymm1
201 vpmuludq 224-128(%r9),%ymm11,%ymm2
202 vpbroadcastq 160-128(%r15),%ymm11
203 vpaddq 352-448(%r12),%ymm2,%ymm2
204
205 vmovdqu %ymm6,192-192(%rbx)
206 vmovdqu %ymm7,224-192(%rbx)
207
208 vpmuludq 128-128(%rsi),%ymm10,%ymm12
209 vpaddq %ymm12,%ymm8,%ymm8
210 vpmuludq 128-128(%r9),%ymm10,%ymm14
211 vpaddq %ymm14,%ymm0,%ymm0
212 vpmuludq 160-128(%r9),%ymm10,%ymm13
213 vpaddq %ymm13,%ymm1,%ymm1
214 vpmuludq 192-128(%r9),%ymm10,%ymm12
215 vpaddq %ymm12,%ymm2,%ymm2
216 vpmuludq 224-128(%r9),%ymm10,%ymm3
217 vpbroadcastq 192-128(%r15),%ymm10
218 vpaddq 384-448(%r12),%ymm3,%ymm3
219
220 vmovdqu %ymm8,256-192(%rbx)
221 vmovdqu %ymm0,288-192(%rbx)
222 leaq 8(%rbx),%rbx
223
224 vpmuludq 160-128(%rsi),%ymm11,%ymm13
225 vpaddq %ymm13,%ymm1,%ymm1
226 vpmuludq 160-128(%r9),%ymm11,%ymm12
227 vpaddq %ymm12,%ymm2,%ymm2
228 vpmuludq 192-128(%r9),%ymm11,%ymm14
229 vpaddq %ymm14,%ymm3,%ymm3
230 vpmuludq 224-128(%r9),%ymm11,%ymm4
231 vpbroadcastq 224-128(%r15),%ymm11
232 vpaddq 416-448(%r12),%ymm4,%ymm4
233
234 vmovdqu %ymm1,320-448(%r12)
235 vmovdqu %ymm2,352-448(%r12)
236
237 vpmuludq 192-128(%rsi),%ymm10,%ymm12
238 vpaddq %ymm12,%ymm3,%ymm3
239 vpmuludq 192-128(%r9),%ymm10,%ymm14
240 vpbroadcastq 256-128(%r15),%ymm0
241 vpaddq %ymm14,%ymm4,%ymm4
242 vpmuludq 224-128(%r9),%ymm10,%ymm5
243 vpbroadcastq 0+8-128(%r15),%ymm10
244 vpaddq 448-448(%r12),%ymm5,%ymm5
245
246 vmovdqu %ymm3,384-448(%r12)
247 vmovdqu %ymm4,416-448(%r12)
248 leaq 8(%r15),%r15
249
250 vpmuludq 224-128(%rsi),%ymm11,%ymm12
251 vpaddq %ymm12,%ymm5,%ymm5
252 vpmuludq 224-128(%r9),%ymm11,%ymm6
253 vpaddq 480-448(%r12),%ymm6,%ymm6
254
255 vpmuludq 256-128(%rsi),%ymm0,%ymm7
256 vmovdqu %ymm5,448-448(%r12)
257 vpaddq 512-448(%r12),%ymm7,%ymm7
258 vmovdqu %ymm6,480-448(%r12)
259 vmovdqu %ymm7,512-448(%r12)
260 leaq 8(%r12),%r12
261
262 decl %r14d
263 jnz .LOOP_SQR_1024
264
265 vmovdqu 256(%rsp),%ymm8
266 vmovdqu 288(%rsp),%ymm1
267 vmovdqu 320(%rsp),%ymm2
268 leaq 192(%rsp),%rbx
269
270 vpsrlq $29,%ymm8,%ymm14
271 vpand %ymm15,%ymm8,%ymm8
272 vpsrlq $29,%ymm1,%ymm11
273 vpand %ymm15,%ymm1,%ymm1
274
275 vpermq $0x93,%ymm14,%ymm14
276 vpxor %ymm9,%ymm9,%ymm9
277 vpermq $0x93,%ymm11,%ymm11
278
279 vpblendd $3,%ymm9,%ymm14,%ymm10
280 vpblendd $3,%ymm14,%ymm11,%ymm14
281 vpaddq %ymm10,%ymm8,%ymm8
282 vpblendd $3,%ymm11,%ymm9,%ymm11
283 vpaddq %ymm14,%ymm1,%ymm1
284 vpaddq %ymm11,%ymm2,%ymm2
285 vmovdqu %ymm1,288-192(%rbx)
286 vmovdqu %ymm2,320-192(%rbx)
287
288 movq (%rsp),%rax
289 movq 8(%rsp),%r10
290 movq 16(%rsp),%r11
291 movq 24(%rsp),%r12
292 vmovdqu 32(%rsp),%ymm1
293 vmovdqu 64-192(%rbx),%ymm2
294 vmovdqu 96-192(%rbx),%ymm3
295 vmovdqu 128-192(%rbx),%ymm4
296 vmovdqu 160-192(%rbx),%ymm5
297 vmovdqu 192-192(%rbx),%ymm6
298 vmovdqu 224-192(%rbx),%ymm7
299
300 movq %rax,%r9
301 imull %ecx,%eax
302 andl $0x1fffffff,%eax
303 vmovd %eax,%xmm12
304
305 movq %rax,%rdx
306 imulq -128(%r13),%rax
307 vpbroadcastq %xmm12,%ymm12
308 addq %rax,%r9
309 movq %rdx,%rax
310 imulq 8-128(%r13),%rax
311 shrq $29,%r9
312 addq %rax,%r10
313 movq %rdx,%rax
314 imulq 16-128(%r13),%rax
315 addq %r9,%r10
316 addq %rax,%r11
317 imulq 24-128(%r13),%rdx
318 addq %rdx,%r12
319
320 movq %r10,%rax
321 imull %ecx,%eax
322 andl $0x1fffffff,%eax
323
324 movl $9,%r14d
325 jmp .LOOP_REDUCE_1024
326
327.align 32
328.LOOP_REDUCE_1024:
329 vmovd %eax,%xmm13
330 vpbroadcastq %xmm13,%ymm13
331
332 vpmuludq 32-128(%r13),%ymm12,%ymm10
333 movq %rax,%rdx
334 imulq -128(%r13),%rax
335 vpaddq %ymm10,%ymm1,%ymm1
336 addq %rax,%r10
337 vpmuludq 64-128(%r13),%ymm12,%ymm14
338 movq %rdx,%rax
339 imulq 8-128(%r13),%rax
340 vpaddq %ymm14,%ymm2,%ymm2
341 vpmuludq 96-128(%r13),%ymm12,%ymm11
342.byte 0x67
343 addq %rax,%r11
344.byte 0x67
345 movq %rdx,%rax
346 imulq 16-128(%r13),%rax
347 shrq $29,%r10
348 vpaddq %ymm11,%ymm3,%ymm3
349 vpmuludq 128-128(%r13),%ymm12,%ymm10
350 addq %rax,%r12
351 addq %r10,%r11
352 vpaddq %ymm10,%ymm4,%ymm4
353 vpmuludq 160-128(%r13),%ymm12,%ymm14
354 movq %r11,%rax
355 imull %ecx,%eax
356 vpaddq %ymm14,%ymm5,%ymm5
357 vpmuludq 192-128(%r13),%ymm12,%ymm11
358 andl $0x1fffffff,%eax
359 vpaddq %ymm11,%ymm6,%ymm6
360 vpmuludq 224-128(%r13),%ymm12,%ymm10
361 vpaddq %ymm10,%ymm7,%ymm7
362 vpmuludq 256-128(%r13),%ymm12,%ymm14
363 vmovd %eax,%xmm12
364
365 vpaddq %ymm14,%ymm8,%ymm8
366
367 vpbroadcastq %xmm12,%ymm12
368
369 vpmuludq 32-8-128(%r13),%ymm13,%ymm11
370 vmovdqu 96-8-128(%r13),%ymm14
371 movq %rax,%rdx
372 imulq -128(%r13),%rax
373 vpaddq %ymm11,%ymm1,%ymm1
374 vpmuludq 64-8-128(%r13),%ymm13,%ymm10
375 vmovdqu 128-8-128(%r13),%ymm11
376 addq %rax,%r11
377 movq %rdx,%rax
378 imulq 8-128(%r13),%rax
379 vpaddq %ymm10,%ymm2,%ymm2
380 addq %r12,%rax
381 shrq $29,%r11
382 vpmuludq %ymm13,%ymm14,%ymm14
383 vmovdqu 160-8-128(%r13),%ymm10
384 addq %r11,%rax
385 vpaddq %ymm14,%ymm3,%ymm3
386 vpmuludq %ymm13,%ymm11,%ymm11
387 vmovdqu 192-8-128(%r13),%ymm14
388.byte 0x67
389 movq %rax,%r12
390 imull %ecx,%eax
391 vpaddq %ymm11,%ymm4,%ymm4
392 vpmuludq %ymm13,%ymm10,%ymm10
393.byte 0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00
394 andl $0x1fffffff,%eax
395 vpaddq %ymm10,%ymm5,%ymm5
396 vpmuludq %ymm13,%ymm14,%ymm14
397 vmovdqu 256-8-128(%r13),%ymm10
398 vpaddq %ymm14,%ymm6,%ymm6
399 vpmuludq %ymm13,%ymm11,%ymm11
400 vmovdqu 288-8-128(%r13),%ymm9
401 vmovd %eax,%xmm0
402 imulq -128(%r13),%rax
403 vpaddq %ymm11,%ymm7,%ymm7
404 vpmuludq %ymm13,%ymm10,%ymm10
405 vmovdqu 32-16-128(%r13),%ymm14
406 vpbroadcastq %xmm0,%ymm0
407 vpaddq %ymm10,%ymm8,%ymm8
408 vpmuludq %ymm13,%ymm9,%ymm9
409 vmovdqu 64-16-128(%r13),%ymm11
410 addq %rax,%r12
411
412 vmovdqu 32-24-128(%r13),%ymm13
413 vpmuludq %ymm12,%ymm14,%ymm14
414 vmovdqu 96-16-128(%r13),%ymm10
415 vpaddq %ymm14,%ymm1,%ymm1
416 vpmuludq %ymm0,%ymm13,%ymm13
417 vpmuludq %ymm12,%ymm11,%ymm11
418.byte 0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff
419 vpaddq %ymm1,%ymm13,%ymm13
420 vpaddq %ymm11,%ymm2,%ymm2
421 vpmuludq %ymm12,%ymm10,%ymm10
422 vmovdqu 160-16-128(%r13),%ymm11
423.byte 0x67
424 vmovq %xmm13,%rax
425 vmovdqu %ymm13,(%rsp)
426 vpaddq %ymm10,%ymm3,%ymm3
427 vpmuludq %ymm12,%ymm14,%ymm14
428 vmovdqu 192-16-128(%r13),%ymm10
429 vpaddq %ymm14,%ymm4,%ymm4
430 vpmuludq %ymm12,%ymm11,%ymm11
431 vmovdqu 224-16-128(%r13),%ymm14
432 vpaddq %ymm11,%ymm5,%ymm5
433 vpmuludq %ymm12,%ymm10,%ymm10
434 vmovdqu 256-16-128(%r13),%ymm11
435 vpaddq %ymm10,%ymm6,%ymm6
436 vpmuludq %ymm12,%ymm14,%ymm14
437 shrq $29,%r12
438 vmovdqu 288-16-128(%r13),%ymm10
439 addq %r12,%rax
440 vpaddq %ymm14,%ymm7,%ymm7
441 vpmuludq %ymm12,%ymm11,%ymm11
442
443 movq %rax,%r9
444 imull %ecx,%eax
445 vpaddq %ymm11,%ymm8,%ymm8
446 vpmuludq %ymm12,%ymm10,%ymm10
447 andl $0x1fffffff,%eax
448 vmovd %eax,%xmm12
449 vmovdqu 96-24-128(%r13),%ymm11
450.byte 0x67
451 vpaddq %ymm10,%ymm9,%ymm9
452 vpbroadcastq %xmm12,%ymm12
453
454 vpmuludq 64-24-128(%r13),%ymm0,%ymm14
455 vmovdqu 128-24-128(%r13),%ymm10
456 movq %rax,%rdx
457 imulq -128(%r13),%rax
458 movq 8(%rsp),%r10
459 vpaddq %ymm14,%ymm2,%ymm1
460 vpmuludq %ymm0,%ymm11,%ymm11
461 vmovdqu 160-24-128(%r13),%ymm14
462 addq %rax,%r9
463 movq %rdx,%rax
464 imulq 8-128(%r13),%rax
465.byte 0x67
466 shrq $29,%r9
467 movq 16(%rsp),%r11
468 vpaddq %ymm11,%ymm3,%ymm2
469 vpmuludq %ymm0,%ymm10,%ymm10
470 vmovdqu 192-24-128(%r13),%ymm11
471 addq %rax,%r10
472 movq %rdx,%rax
473 imulq 16-128(%r13),%rax
474 vpaddq %ymm10,%ymm4,%ymm3
475 vpmuludq %ymm0,%ymm14,%ymm14
476 vmovdqu 224-24-128(%r13),%ymm10
477 imulq 24-128(%r13),%rdx
478 addq %rax,%r11
479 leaq (%r9,%r10,1),%rax
480 vpaddq %ymm14,%ymm5,%ymm4
481 vpmuludq %ymm0,%ymm11,%ymm11
482 vmovdqu 256-24-128(%r13),%ymm14
483 movq %rax,%r10
484 imull %ecx,%eax
485 vpmuludq %ymm0,%ymm10,%ymm10
486 vpaddq %ymm11,%ymm6,%ymm5
487 vmovdqu 288-24-128(%r13),%ymm11
488 andl $0x1fffffff,%eax
489 vpaddq %ymm10,%ymm7,%ymm6
490 vpmuludq %ymm0,%ymm14,%ymm14
491 addq 24(%rsp),%rdx
492 vpaddq %ymm14,%ymm8,%ymm7
493 vpmuludq %ymm0,%ymm11,%ymm11
494 vpaddq %ymm11,%ymm9,%ymm8
495 vmovq %r12,%xmm9
496 movq %rdx,%r12
497
498 decl %r14d
499 jnz .LOOP_REDUCE_1024
500 leaq 448(%rsp),%r12
501 vpaddq %ymm9,%ymm13,%ymm0
502 vpxor %ymm9,%ymm9,%ymm9
503
504 vpaddq 288-192(%rbx),%ymm0,%ymm0
505 vpaddq 320-448(%r12),%ymm1,%ymm1
506 vpaddq 352-448(%r12),%ymm2,%ymm2
507 vpaddq 384-448(%r12),%ymm3,%ymm3
508 vpaddq 416-448(%r12),%ymm4,%ymm4
509 vpaddq 448-448(%r12),%ymm5,%ymm5
510 vpaddq 480-448(%r12),%ymm6,%ymm6
511 vpaddq 512-448(%r12),%ymm7,%ymm7
512 vpaddq 544-448(%r12),%ymm8,%ymm8
513
514 vpsrlq $29,%ymm0,%ymm14
515 vpand %ymm15,%ymm0,%ymm0
516 vpsrlq $29,%ymm1,%ymm11
517 vpand %ymm15,%ymm1,%ymm1
518 vpsrlq $29,%ymm2,%ymm12
519 vpermq $0x93,%ymm14,%ymm14
520 vpand %ymm15,%ymm2,%ymm2
521 vpsrlq $29,%ymm3,%ymm13
522 vpermq $0x93,%ymm11,%ymm11
523 vpand %ymm15,%ymm3,%ymm3
524 vpermq $0x93,%ymm12,%ymm12
525
526 vpblendd $3,%ymm9,%ymm14,%ymm10
527 vpermq $0x93,%ymm13,%ymm13
528 vpblendd $3,%ymm14,%ymm11,%ymm14
529 vpaddq %ymm10,%ymm0,%ymm0
530 vpblendd $3,%ymm11,%ymm12,%ymm11
531 vpaddq %ymm14,%ymm1,%ymm1
532 vpblendd $3,%ymm12,%ymm13,%ymm12
533 vpaddq %ymm11,%ymm2,%ymm2
534 vpblendd $3,%ymm13,%ymm9,%ymm13
535 vpaddq %ymm12,%ymm3,%ymm3
536 vpaddq %ymm13,%ymm4,%ymm4
537
538 vpsrlq $29,%ymm0,%ymm14
539 vpand %ymm15,%ymm0,%ymm0
540 vpsrlq $29,%ymm1,%ymm11
541 vpand %ymm15,%ymm1,%ymm1
542 vpsrlq $29,%ymm2,%ymm12
543 vpermq $0x93,%ymm14,%ymm14
544 vpand %ymm15,%ymm2,%ymm2
545 vpsrlq $29,%ymm3,%ymm13
546 vpermq $0x93,%ymm11,%ymm11
547 vpand %ymm15,%ymm3,%ymm3
548 vpermq $0x93,%ymm12,%ymm12
549
550 vpblendd $3,%ymm9,%ymm14,%ymm10
551 vpermq $0x93,%ymm13,%ymm13
552 vpblendd $3,%ymm14,%ymm11,%ymm14
553 vpaddq %ymm10,%ymm0,%ymm0
554 vpblendd $3,%ymm11,%ymm12,%ymm11
555 vpaddq %ymm14,%ymm1,%ymm1
556 vmovdqu %ymm0,0-128(%rdi)
557 vpblendd $3,%ymm12,%ymm13,%ymm12
558 vpaddq %ymm11,%ymm2,%ymm2
559 vmovdqu %ymm1,32-128(%rdi)
560 vpblendd $3,%ymm13,%ymm9,%ymm13
561 vpaddq %ymm12,%ymm3,%ymm3
562 vmovdqu %ymm2,64-128(%rdi)
563 vpaddq %ymm13,%ymm4,%ymm4
564 vmovdqu %ymm3,96-128(%rdi)
565 vpsrlq $29,%ymm4,%ymm14
566 vpand %ymm15,%ymm4,%ymm4
567 vpsrlq $29,%ymm5,%ymm11
568 vpand %ymm15,%ymm5,%ymm5
569 vpsrlq $29,%ymm6,%ymm12
570 vpermq $0x93,%ymm14,%ymm14
571 vpand %ymm15,%ymm6,%ymm6
572 vpsrlq $29,%ymm7,%ymm13
573 vpermq $0x93,%ymm11,%ymm11
574 vpand %ymm15,%ymm7,%ymm7
575 vpsrlq $29,%ymm8,%ymm0
576 vpermq $0x93,%ymm12,%ymm12
577 vpand %ymm15,%ymm8,%ymm8
578 vpermq $0x93,%ymm13,%ymm13
579
580 vpblendd $3,%ymm9,%ymm14,%ymm10
581 vpermq $0x93,%ymm0,%ymm0
582 vpblendd $3,%ymm14,%ymm11,%ymm14
583 vpaddq %ymm10,%ymm4,%ymm4
584 vpblendd $3,%ymm11,%ymm12,%ymm11
585 vpaddq %ymm14,%ymm5,%ymm5
586 vpblendd $3,%ymm12,%ymm13,%ymm12
587 vpaddq %ymm11,%ymm6,%ymm6
588 vpblendd $3,%ymm13,%ymm0,%ymm13
589 vpaddq %ymm12,%ymm7,%ymm7
590 vpaddq %ymm13,%ymm8,%ymm8
591
592 vpsrlq $29,%ymm4,%ymm14
593 vpand %ymm15,%ymm4,%ymm4
594 vpsrlq $29,%ymm5,%ymm11
595 vpand %ymm15,%ymm5,%ymm5
596 vpsrlq $29,%ymm6,%ymm12
597 vpermq $0x93,%ymm14,%ymm14
598 vpand %ymm15,%ymm6,%ymm6
599 vpsrlq $29,%ymm7,%ymm13
600 vpermq $0x93,%ymm11,%ymm11
601 vpand %ymm15,%ymm7,%ymm7
602 vpsrlq $29,%ymm8,%ymm0
603 vpermq $0x93,%ymm12,%ymm12
604 vpand %ymm15,%ymm8,%ymm8
605 vpermq $0x93,%ymm13,%ymm13
606
607 vpblendd $3,%ymm9,%ymm14,%ymm10
608 vpermq $0x93,%ymm0,%ymm0
609 vpblendd $3,%ymm14,%ymm11,%ymm14
610 vpaddq %ymm10,%ymm4,%ymm4
611 vpblendd $3,%ymm11,%ymm12,%ymm11
612 vpaddq %ymm14,%ymm5,%ymm5
613 vmovdqu %ymm4,128-128(%rdi)
614 vpblendd $3,%ymm12,%ymm13,%ymm12
615 vpaddq %ymm11,%ymm6,%ymm6
616 vmovdqu %ymm5,160-128(%rdi)
617 vpblendd $3,%ymm13,%ymm0,%ymm13
618 vpaddq %ymm12,%ymm7,%ymm7
619 vmovdqu %ymm6,192-128(%rdi)
620 vpaddq %ymm13,%ymm8,%ymm8
621 vmovdqu %ymm7,224-128(%rdi)
622 vmovdqu %ymm8,256-128(%rdi)
623
624 movq %rdi,%rsi
625 decl %r8d
626 jne .LOOP_GRANDE_SQR_1024
627
628 vzeroall
629 movq %rbp,%rax
630 movq -48(%rax),%r15
631 movq -40(%rax),%r14
632 movq -32(%rax),%r13
633 movq -24(%rax),%r12
634 movq -16(%rax),%rbp
635 movq -8(%rax),%rbx
636 leaq (%rax),%rsp
637.Lsqr_1024_epilogue:
638 .byte 0xf3,0xc3
639.size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
640.globl rsaz_1024_mul_avx2
641.type rsaz_1024_mul_avx2,@function
642.align 64
643rsaz_1024_mul_avx2:
644 leaq (%rsp),%rax
645 pushq %rbx
646 pushq %rbp
647 pushq %r12
648 pushq %r13
649 pushq %r14
650 pushq %r15
651 movq %rax,%rbp
652 vzeroall
653 movq %rdx,%r13
654 subq $64,%rsp
655
656
657
658
659
660
661.byte 0x67,0x67
662 movq %rsi,%r15
663 andq $4095,%r15
664 addq $320,%r15
665 shrq $12,%r15
666 movq %rsi,%r15
667 cmovnzq %r13,%rsi
668 cmovnzq %r15,%r13
669
670 movq %rcx,%r15
671 subq $-128,%rsi
672 subq $-128,%rcx
673 subq $-128,%rdi
674
675 andq $4095,%r15
676 addq $320,%r15
677.byte 0x67,0x67
678 shrq $12,%r15
679 jz .Lmul_1024_no_n_copy
680
681
682
683
684
685 subq $320,%rsp
686 vmovdqu 0-128(%rcx),%ymm0
687 andq $-512,%rsp
688 vmovdqu 32-128(%rcx),%ymm1
689 vmovdqu 64-128(%rcx),%ymm2
690 vmovdqu 96-128(%rcx),%ymm3
691 vmovdqu 128-128(%rcx),%ymm4
692 vmovdqu 160-128(%rcx),%ymm5
693 vmovdqu 192-128(%rcx),%ymm6
694 vmovdqu 224-128(%rcx),%ymm7
695 vmovdqu 256-128(%rcx),%ymm8
696 leaq 64+128(%rsp),%rcx
697 vmovdqu %ymm0,0-128(%rcx)
698 vpxor %ymm0,%ymm0,%ymm0
699 vmovdqu %ymm1,32-128(%rcx)
700 vpxor %ymm1,%ymm1,%ymm1
701 vmovdqu %ymm2,64-128(%rcx)
702 vpxor %ymm2,%ymm2,%ymm2
703 vmovdqu %ymm3,96-128(%rcx)
704 vpxor %ymm3,%ymm3,%ymm3
705 vmovdqu %ymm4,128-128(%rcx)
706 vpxor %ymm4,%ymm4,%ymm4
707 vmovdqu %ymm5,160-128(%rcx)
708 vpxor %ymm5,%ymm5,%ymm5
709 vmovdqu %ymm6,192-128(%rcx)
710 vpxor %ymm6,%ymm6,%ymm6
711 vmovdqu %ymm7,224-128(%rcx)
712 vpxor %ymm7,%ymm7,%ymm7
713 vmovdqu %ymm8,256-128(%rcx)
714 vmovdqa %ymm0,%ymm8
715 vmovdqu %ymm9,288-128(%rcx)
716.Lmul_1024_no_n_copy:
717 andq $-64,%rsp
718
719 movq (%r13),%rbx
720 vpbroadcastq (%r13),%ymm10
721 vmovdqu %ymm0,(%rsp)
722 xorq %r9,%r9
723.byte 0x67
724 xorq %r10,%r10
725 xorq %r11,%r11
726 xorq %r12,%r12
727
728 vmovdqu .Land_mask(%rip),%ymm15
729 movl $9,%r14d
730 vmovdqu %ymm9,288-128(%rdi)
731 jmp .Loop_mul_1024
732
733.align 32
734.Loop_mul_1024:
735 vpsrlq $29,%ymm3,%ymm9
736 movq %rbx,%rax
737 imulq -128(%rsi),%rax
738 addq %r9,%rax
739 movq %rbx,%r10
740 imulq 8-128(%rsi),%r10
741 addq 8(%rsp),%r10
742
743 movq %rax,%r9
744 imull %r8d,%eax
745 andl $0x1fffffff,%eax
746
747 movq %rbx,%r11
748 imulq 16-128(%rsi),%r11
749 addq 16(%rsp),%r11
750
751 movq %rbx,%r12
752 imulq 24-128(%rsi),%r12
753 addq 24(%rsp),%r12
754 vpmuludq 32-128(%rsi),%ymm10,%ymm0
755 vmovd %eax,%xmm11
756 vpaddq %ymm0,%ymm1,%ymm1
757 vpmuludq 64-128(%rsi),%ymm10,%ymm12
758 vpbroadcastq %xmm11,%ymm11
759 vpaddq %ymm12,%ymm2,%ymm2
760 vpmuludq 96-128(%rsi),%ymm10,%ymm13
761 vpand %ymm15,%ymm3,%ymm3
762 vpaddq %ymm13,%ymm3,%ymm3
763 vpmuludq 128-128(%rsi),%ymm10,%ymm0
764 vpaddq %ymm0,%ymm4,%ymm4
765 vpmuludq 160-128(%rsi),%ymm10,%ymm12
766 vpaddq %ymm12,%ymm5,%ymm5
767 vpmuludq 192-128(%rsi),%ymm10,%ymm13
768 vpaddq %ymm13,%ymm6,%ymm6
769 vpmuludq 224-128(%rsi),%ymm10,%ymm0
770 vpermq $0x93,%ymm9,%ymm9
771 vpaddq %ymm0,%ymm7,%ymm7
772 vpmuludq 256-128(%rsi),%ymm10,%ymm12
773 vpbroadcastq 8(%r13),%ymm10
774 vpaddq %ymm12,%ymm8,%ymm8
775
776 movq %rax,%rdx
777 imulq -128(%rcx),%rax
778 addq %rax,%r9
779 movq %rdx,%rax
780 imulq 8-128(%rcx),%rax
781 addq %rax,%r10
782 movq %rdx,%rax
783 imulq 16-128(%rcx),%rax
784 addq %rax,%r11
785 shrq $29,%r9
786 imulq 24-128(%rcx),%rdx
787 addq %rdx,%r12
788 addq %r9,%r10
789
790 vpmuludq 32-128(%rcx),%ymm11,%ymm13
791 vmovq %xmm10,%rbx
792 vpaddq %ymm13,%ymm1,%ymm1
793 vpmuludq 64-128(%rcx),%ymm11,%ymm0
794 vpaddq %ymm0,%ymm2,%ymm2
795 vpmuludq 96-128(%rcx),%ymm11,%ymm12
796 vpaddq %ymm12,%ymm3,%ymm3
797 vpmuludq 128-128(%rcx),%ymm11,%ymm13
798 vpaddq %ymm13,%ymm4,%ymm4
799 vpmuludq 160-128(%rcx),%ymm11,%ymm0
800 vpaddq %ymm0,%ymm5,%ymm5
801 vpmuludq 192-128(%rcx),%ymm11,%ymm12
802 vpaddq %ymm12,%ymm6,%ymm6
803 vpmuludq 224-128(%rcx),%ymm11,%ymm13
804 vpblendd $3,%ymm14,%ymm9,%ymm9
804 vpblendd $3,%ymm14,%ymm9,%ymm12
805 vpaddq %ymm13,%ymm7,%ymm7
806 vpmuludq 256-128(%rcx),%ymm11,%ymm0
805 vpaddq %ymm13,%ymm7,%ymm7
806 vpmuludq 256-128(%rcx),%ymm11,%ymm0
807 vpaddq %ymm9,%ymm3,%ymm3
807 vpaddq %ymm12,%ymm3,%ymm3
808 vpaddq %ymm0,%ymm8,%ymm8
809
810 movq %rbx,%rax
811 imulq -128(%rsi),%rax
812 addq %rax,%r10
813 vmovdqu -8+32-128(%rsi),%ymm12
814 movq %rbx,%rax
815 imulq 8-128(%rsi),%rax
816 addq %rax,%r11
817 vmovdqu -8+64-128(%rsi),%ymm13
818
819 movq %r10,%rax
808 vpaddq %ymm0,%ymm8,%ymm8
809
810 movq %rbx,%rax
811 imulq -128(%rsi),%rax
812 addq %rax,%r10
813 vmovdqu -8+32-128(%rsi),%ymm12
814 movq %rbx,%rax
815 imulq 8-128(%rsi),%rax
816 addq %rax,%r11
817 vmovdqu -8+64-128(%rsi),%ymm13
818
819 movq %r10,%rax
820 vpblendd $0xfc,%ymm14,%ymm9,%ymm9
820 imull %r8d,%eax
821 imull %r8d,%eax
822 vpaddq %ymm9,%ymm4,%ymm4
821 andl $0x1fffffff,%eax
822
823 imulq 16-128(%rsi),%rbx
824 addq %rbx,%r12
825 vpmuludq %ymm10,%ymm12,%ymm12
826 vmovd %eax,%xmm11
827 vmovdqu -8+96-128(%rsi),%ymm0
828 vpaddq %ymm12,%ymm1,%ymm1
829 vpmuludq %ymm10,%ymm13,%ymm13
830 vpbroadcastq %xmm11,%ymm11
831 vmovdqu -8+128-128(%rsi),%ymm12
832 vpaddq %ymm13,%ymm2,%ymm2
833 vpmuludq %ymm10,%ymm0,%ymm0
834 vmovdqu -8+160-128(%rsi),%ymm13
835 vpaddq %ymm0,%ymm3,%ymm3
836 vpmuludq %ymm10,%ymm12,%ymm12
837 vmovdqu -8+192-128(%rsi),%ymm0
838 vpaddq %ymm12,%ymm4,%ymm4
839 vpmuludq %ymm10,%ymm13,%ymm13
840 vmovdqu -8+224-128(%rsi),%ymm12
841 vpaddq %ymm13,%ymm5,%ymm5
842 vpmuludq %ymm10,%ymm0,%ymm0
843 vmovdqu -8+256-128(%rsi),%ymm13
844 vpaddq %ymm0,%ymm6,%ymm6
845 vpmuludq %ymm10,%ymm12,%ymm12
846 vmovdqu -8+288-128(%rsi),%ymm9
847 vpaddq %ymm12,%ymm7,%ymm7
848 vpmuludq %ymm10,%ymm13,%ymm13
849 vpaddq %ymm13,%ymm8,%ymm8
850 vpmuludq %ymm10,%ymm9,%ymm9
851 vpbroadcastq 16(%r13),%ymm10
852
853 movq %rax,%rdx
854 imulq -128(%rcx),%rax
855 addq %rax,%r10
856 vmovdqu -8+32-128(%rcx),%ymm0
857 movq %rdx,%rax
858 imulq 8-128(%rcx),%rax
859 addq %rax,%r11
860 vmovdqu -8+64-128(%rcx),%ymm12
861 shrq $29,%r10
862 imulq 16-128(%rcx),%rdx
863 addq %rdx,%r12
864 addq %r10,%r11
865
866 vpmuludq %ymm11,%ymm0,%ymm0
867 vmovq %xmm10,%rbx
868 vmovdqu -8+96-128(%rcx),%ymm13
869 vpaddq %ymm0,%ymm1,%ymm1
870 vpmuludq %ymm11,%ymm12,%ymm12
871 vmovdqu -8+128-128(%rcx),%ymm0
872 vpaddq %ymm12,%ymm2,%ymm2
873 vpmuludq %ymm11,%ymm13,%ymm13
874 vmovdqu -8+160-128(%rcx),%ymm12
875 vpaddq %ymm13,%ymm3,%ymm3
876 vpmuludq %ymm11,%ymm0,%ymm0
877 vmovdqu -8+192-128(%rcx),%ymm13
878 vpaddq %ymm0,%ymm4,%ymm4
879 vpmuludq %ymm11,%ymm12,%ymm12
880 vmovdqu -8+224-128(%rcx),%ymm0
881 vpaddq %ymm12,%ymm5,%ymm5
882 vpmuludq %ymm11,%ymm13,%ymm13
883 vmovdqu -8+256-128(%rcx),%ymm12
884 vpaddq %ymm13,%ymm6,%ymm6
885 vpmuludq %ymm11,%ymm0,%ymm0
886 vmovdqu -8+288-128(%rcx),%ymm13
887 vpaddq %ymm0,%ymm7,%ymm7
888 vpmuludq %ymm11,%ymm12,%ymm12
889 vpaddq %ymm12,%ymm8,%ymm8
890 vpmuludq %ymm11,%ymm13,%ymm13
891 vpaddq %ymm13,%ymm9,%ymm9
892
893 vmovdqu -16+32-128(%rsi),%ymm0
894 movq %rbx,%rax
895 imulq -128(%rsi),%rax
896 addq %r11,%rax
897
898 vmovdqu -16+64-128(%rsi),%ymm12
899 movq %rax,%r11
900 imull %r8d,%eax
901 andl $0x1fffffff,%eax
902
903 imulq 8-128(%rsi),%rbx
904 addq %rbx,%r12
905 vpmuludq %ymm10,%ymm0,%ymm0
906 vmovd %eax,%xmm11
907 vmovdqu -16+96-128(%rsi),%ymm13
908 vpaddq %ymm0,%ymm1,%ymm1
909 vpmuludq %ymm10,%ymm12,%ymm12
910 vpbroadcastq %xmm11,%ymm11
911 vmovdqu -16+128-128(%rsi),%ymm0
912 vpaddq %ymm12,%ymm2,%ymm2
913 vpmuludq %ymm10,%ymm13,%ymm13
914 vmovdqu -16+160-128(%rsi),%ymm12
915 vpaddq %ymm13,%ymm3,%ymm3
916 vpmuludq %ymm10,%ymm0,%ymm0
917 vmovdqu -16+192-128(%rsi),%ymm13
918 vpaddq %ymm0,%ymm4,%ymm4
919 vpmuludq %ymm10,%ymm12,%ymm12
920 vmovdqu -16+224-128(%rsi),%ymm0
921 vpaddq %ymm12,%ymm5,%ymm5
922 vpmuludq %ymm10,%ymm13,%ymm13
923 vmovdqu -16+256-128(%rsi),%ymm12
924 vpaddq %ymm13,%ymm6,%ymm6
925 vpmuludq %ymm10,%ymm0,%ymm0
926 vmovdqu -16+288-128(%rsi),%ymm13
927 vpaddq %ymm0,%ymm7,%ymm7
928 vpmuludq %ymm10,%ymm12,%ymm12
929 vpaddq %ymm12,%ymm8,%ymm8
930 vpmuludq %ymm10,%ymm13,%ymm13
931 vpbroadcastq 24(%r13),%ymm10
932 vpaddq %ymm13,%ymm9,%ymm9
933
934 vmovdqu -16+32-128(%rcx),%ymm0
935 movq %rax,%rdx
936 imulq -128(%rcx),%rax
937 addq %rax,%r11
938 vmovdqu -16+64-128(%rcx),%ymm12
939 imulq 8-128(%rcx),%rdx
940 addq %rdx,%r12
941 shrq $29,%r11
942
943 vpmuludq %ymm11,%ymm0,%ymm0
944 vmovq %xmm10,%rbx
945 vmovdqu -16+96-128(%rcx),%ymm13
946 vpaddq %ymm0,%ymm1,%ymm1
947 vpmuludq %ymm11,%ymm12,%ymm12
948 vmovdqu -16+128-128(%rcx),%ymm0
949 vpaddq %ymm12,%ymm2,%ymm2
950 vpmuludq %ymm11,%ymm13,%ymm13
951 vmovdqu -16+160-128(%rcx),%ymm12
952 vpaddq %ymm13,%ymm3,%ymm3
953 vpmuludq %ymm11,%ymm0,%ymm0
954 vmovdqu -16+192-128(%rcx),%ymm13
955 vpaddq %ymm0,%ymm4,%ymm4
956 vpmuludq %ymm11,%ymm12,%ymm12
957 vmovdqu -16+224-128(%rcx),%ymm0
958 vpaddq %ymm12,%ymm5,%ymm5
959 vpmuludq %ymm11,%ymm13,%ymm13
960 vmovdqu -16+256-128(%rcx),%ymm12
961 vpaddq %ymm13,%ymm6,%ymm6
962 vpmuludq %ymm11,%ymm0,%ymm0
963 vmovdqu -16+288-128(%rcx),%ymm13
964 vpaddq %ymm0,%ymm7,%ymm7
965 vpmuludq %ymm11,%ymm12,%ymm12
966 vmovdqu -24+32-128(%rsi),%ymm0
967 vpaddq %ymm12,%ymm8,%ymm8
968 vpmuludq %ymm11,%ymm13,%ymm13
969 vmovdqu -24+64-128(%rsi),%ymm12
970 vpaddq %ymm13,%ymm9,%ymm9
971
972 addq %r11,%r12
973 imulq -128(%rsi),%rbx
974 addq %rbx,%r12
975
976 movq %r12,%rax
977 imull %r8d,%eax
978 andl $0x1fffffff,%eax
979
980 vpmuludq %ymm10,%ymm0,%ymm0
981 vmovd %eax,%xmm11
982 vmovdqu -24+96-128(%rsi),%ymm13
983 vpaddq %ymm0,%ymm1,%ymm1
984 vpmuludq %ymm10,%ymm12,%ymm12
985 vpbroadcastq %xmm11,%ymm11
986 vmovdqu -24+128-128(%rsi),%ymm0
987 vpaddq %ymm12,%ymm2,%ymm2
988 vpmuludq %ymm10,%ymm13,%ymm13
989 vmovdqu -24+160-128(%rsi),%ymm12
990 vpaddq %ymm13,%ymm3,%ymm3
991 vpmuludq %ymm10,%ymm0,%ymm0
992 vmovdqu -24+192-128(%rsi),%ymm13
993 vpaddq %ymm0,%ymm4,%ymm4
994 vpmuludq %ymm10,%ymm12,%ymm12
995 vmovdqu -24+224-128(%rsi),%ymm0
996 vpaddq %ymm12,%ymm5,%ymm5
997 vpmuludq %ymm10,%ymm13,%ymm13
998 vmovdqu -24+256-128(%rsi),%ymm12
999 vpaddq %ymm13,%ymm6,%ymm6
1000 vpmuludq %ymm10,%ymm0,%ymm0
1001 vmovdqu -24+288-128(%rsi),%ymm13
1002 vpaddq %ymm0,%ymm7,%ymm7
1003 vpmuludq %ymm10,%ymm12,%ymm12
1004 vpaddq %ymm12,%ymm8,%ymm8
1005 vpmuludq %ymm10,%ymm13,%ymm13
1006 vpbroadcastq 32(%r13),%ymm10
1007 vpaddq %ymm13,%ymm9,%ymm9
1008 addq $32,%r13
1009
1010 vmovdqu -24+32-128(%rcx),%ymm0
1011 imulq -128(%rcx),%rax
1012 addq %rax,%r12
1013 shrq $29,%r12
1014
1015 vmovdqu -24+64-128(%rcx),%ymm12
1016 vpmuludq %ymm11,%ymm0,%ymm0
1017 vmovq %xmm10,%rbx
1018 vmovdqu -24+96-128(%rcx),%ymm13
1019 vpaddq %ymm0,%ymm1,%ymm0
1020 vpmuludq %ymm11,%ymm12,%ymm12
1021 vmovdqu %ymm0,(%rsp)
1022 vpaddq %ymm12,%ymm2,%ymm1
1023 vmovdqu -24+128-128(%rcx),%ymm0
1024 vpmuludq %ymm11,%ymm13,%ymm13
1025 vmovdqu -24+160-128(%rcx),%ymm12
1026 vpaddq %ymm13,%ymm3,%ymm2
1027 vpmuludq %ymm11,%ymm0,%ymm0
1028 vmovdqu -24+192-128(%rcx),%ymm13
1029 vpaddq %ymm0,%ymm4,%ymm3
1030 vpmuludq %ymm11,%ymm12,%ymm12
1031 vmovdqu -24+224-128(%rcx),%ymm0
1032 vpaddq %ymm12,%ymm5,%ymm4
1033 vpmuludq %ymm11,%ymm13,%ymm13
1034 vmovdqu -24+256-128(%rcx),%ymm12
1035 vpaddq %ymm13,%ymm6,%ymm5
1036 vpmuludq %ymm11,%ymm0,%ymm0
1037 vmovdqu -24+288-128(%rcx),%ymm13
1038 movq %r12,%r9
1039 vpaddq %ymm0,%ymm7,%ymm6
1040 vpmuludq %ymm11,%ymm12,%ymm12
1041 addq (%rsp),%r9
1042 vpaddq %ymm12,%ymm8,%ymm7
1043 vpmuludq %ymm11,%ymm13,%ymm13
1044 vmovq %r12,%xmm12
1045 vpaddq %ymm13,%ymm9,%ymm8
1046
1047 decl %r14d
1048 jnz .Loop_mul_1024
823 andl $0x1fffffff,%eax
824
825 imulq 16-128(%rsi),%rbx
826 addq %rbx,%r12
827 vpmuludq %ymm10,%ymm12,%ymm12
828 vmovd %eax,%xmm11
829 vmovdqu -8+96-128(%rsi),%ymm0
830 vpaddq %ymm12,%ymm1,%ymm1
831 vpmuludq %ymm10,%ymm13,%ymm13
832 vpbroadcastq %xmm11,%ymm11
833 vmovdqu -8+128-128(%rsi),%ymm12
834 vpaddq %ymm13,%ymm2,%ymm2
835 vpmuludq %ymm10,%ymm0,%ymm0
836 vmovdqu -8+160-128(%rsi),%ymm13
837 vpaddq %ymm0,%ymm3,%ymm3
838 vpmuludq %ymm10,%ymm12,%ymm12
839 vmovdqu -8+192-128(%rsi),%ymm0
840 vpaddq %ymm12,%ymm4,%ymm4
841 vpmuludq %ymm10,%ymm13,%ymm13
842 vmovdqu -8+224-128(%rsi),%ymm12
843 vpaddq %ymm13,%ymm5,%ymm5
844 vpmuludq %ymm10,%ymm0,%ymm0
845 vmovdqu -8+256-128(%rsi),%ymm13
846 vpaddq %ymm0,%ymm6,%ymm6
847 vpmuludq %ymm10,%ymm12,%ymm12
848 vmovdqu -8+288-128(%rsi),%ymm9
849 vpaddq %ymm12,%ymm7,%ymm7
850 vpmuludq %ymm10,%ymm13,%ymm13
851 vpaddq %ymm13,%ymm8,%ymm8
852 vpmuludq %ymm10,%ymm9,%ymm9
853 vpbroadcastq 16(%r13),%ymm10
854
855 movq %rax,%rdx
856 imulq -128(%rcx),%rax
857 addq %rax,%r10
858 vmovdqu -8+32-128(%rcx),%ymm0
859 movq %rdx,%rax
860 imulq 8-128(%rcx),%rax
861 addq %rax,%r11
862 vmovdqu -8+64-128(%rcx),%ymm12
863 shrq $29,%r10
864 imulq 16-128(%rcx),%rdx
865 addq %rdx,%r12
866 addq %r10,%r11
867
868 vpmuludq %ymm11,%ymm0,%ymm0
869 vmovq %xmm10,%rbx
870 vmovdqu -8+96-128(%rcx),%ymm13
871 vpaddq %ymm0,%ymm1,%ymm1
872 vpmuludq %ymm11,%ymm12,%ymm12
873 vmovdqu -8+128-128(%rcx),%ymm0
874 vpaddq %ymm12,%ymm2,%ymm2
875 vpmuludq %ymm11,%ymm13,%ymm13
876 vmovdqu -8+160-128(%rcx),%ymm12
877 vpaddq %ymm13,%ymm3,%ymm3
878 vpmuludq %ymm11,%ymm0,%ymm0
879 vmovdqu -8+192-128(%rcx),%ymm13
880 vpaddq %ymm0,%ymm4,%ymm4
881 vpmuludq %ymm11,%ymm12,%ymm12
882 vmovdqu -8+224-128(%rcx),%ymm0
883 vpaddq %ymm12,%ymm5,%ymm5
884 vpmuludq %ymm11,%ymm13,%ymm13
885 vmovdqu -8+256-128(%rcx),%ymm12
886 vpaddq %ymm13,%ymm6,%ymm6
887 vpmuludq %ymm11,%ymm0,%ymm0
888 vmovdqu -8+288-128(%rcx),%ymm13
889 vpaddq %ymm0,%ymm7,%ymm7
890 vpmuludq %ymm11,%ymm12,%ymm12
891 vpaddq %ymm12,%ymm8,%ymm8
892 vpmuludq %ymm11,%ymm13,%ymm13
893 vpaddq %ymm13,%ymm9,%ymm9
894
895 vmovdqu -16+32-128(%rsi),%ymm0
896 movq %rbx,%rax
897 imulq -128(%rsi),%rax
898 addq %r11,%rax
899
900 vmovdqu -16+64-128(%rsi),%ymm12
901 movq %rax,%r11
902 imull %r8d,%eax
903 andl $0x1fffffff,%eax
904
905 imulq 8-128(%rsi),%rbx
906 addq %rbx,%r12
907 vpmuludq %ymm10,%ymm0,%ymm0
908 vmovd %eax,%xmm11
909 vmovdqu -16+96-128(%rsi),%ymm13
910 vpaddq %ymm0,%ymm1,%ymm1
911 vpmuludq %ymm10,%ymm12,%ymm12
912 vpbroadcastq %xmm11,%ymm11
913 vmovdqu -16+128-128(%rsi),%ymm0
914 vpaddq %ymm12,%ymm2,%ymm2
915 vpmuludq %ymm10,%ymm13,%ymm13
916 vmovdqu -16+160-128(%rsi),%ymm12
917 vpaddq %ymm13,%ymm3,%ymm3
918 vpmuludq %ymm10,%ymm0,%ymm0
919 vmovdqu -16+192-128(%rsi),%ymm13
920 vpaddq %ymm0,%ymm4,%ymm4
921 vpmuludq %ymm10,%ymm12,%ymm12
922 vmovdqu -16+224-128(%rsi),%ymm0
923 vpaddq %ymm12,%ymm5,%ymm5
924 vpmuludq %ymm10,%ymm13,%ymm13
925 vmovdqu -16+256-128(%rsi),%ymm12
926 vpaddq %ymm13,%ymm6,%ymm6
927 vpmuludq %ymm10,%ymm0,%ymm0
928 vmovdqu -16+288-128(%rsi),%ymm13
929 vpaddq %ymm0,%ymm7,%ymm7
930 vpmuludq %ymm10,%ymm12,%ymm12
931 vpaddq %ymm12,%ymm8,%ymm8
932 vpmuludq %ymm10,%ymm13,%ymm13
933 vpbroadcastq 24(%r13),%ymm10
934 vpaddq %ymm13,%ymm9,%ymm9
935
936 vmovdqu -16+32-128(%rcx),%ymm0
937 movq %rax,%rdx
938 imulq -128(%rcx),%rax
939 addq %rax,%r11
940 vmovdqu -16+64-128(%rcx),%ymm12
941 imulq 8-128(%rcx),%rdx
942 addq %rdx,%r12
943 shrq $29,%r11
944
945 vpmuludq %ymm11,%ymm0,%ymm0
946 vmovq %xmm10,%rbx
947 vmovdqu -16+96-128(%rcx),%ymm13
948 vpaddq %ymm0,%ymm1,%ymm1
949 vpmuludq %ymm11,%ymm12,%ymm12
950 vmovdqu -16+128-128(%rcx),%ymm0
951 vpaddq %ymm12,%ymm2,%ymm2
952 vpmuludq %ymm11,%ymm13,%ymm13
953 vmovdqu -16+160-128(%rcx),%ymm12
954 vpaddq %ymm13,%ymm3,%ymm3
955 vpmuludq %ymm11,%ymm0,%ymm0
956 vmovdqu -16+192-128(%rcx),%ymm13
957 vpaddq %ymm0,%ymm4,%ymm4
958 vpmuludq %ymm11,%ymm12,%ymm12
959 vmovdqu -16+224-128(%rcx),%ymm0
960 vpaddq %ymm12,%ymm5,%ymm5
961 vpmuludq %ymm11,%ymm13,%ymm13
962 vmovdqu -16+256-128(%rcx),%ymm12
963 vpaddq %ymm13,%ymm6,%ymm6
964 vpmuludq %ymm11,%ymm0,%ymm0
965 vmovdqu -16+288-128(%rcx),%ymm13
966 vpaddq %ymm0,%ymm7,%ymm7
967 vpmuludq %ymm11,%ymm12,%ymm12
968 vmovdqu -24+32-128(%rsi),%ymm0
969 vpaddq %ymm12,%ymm8,%ymm8
970 vpmuludq %ymm11,%ymm13,%ymm13
971 vmovdqu -24+64-128(%rsi),%ymm12
972 vpaddq %ymm13,%ymm9,%ymm9
973
974 addq %r11,%r12
975 imulq -128(%rsi),%rbx
976 addq %rbx,%r12
977
978 movq %r12,%rax
979 imull %r8d,%eax
980 andl $0x1fffffff,%eax
981
982 vpmuludq %ymm10,%ymm0,%ymm0
983 vmovd %eax,%xmm11
984 vmovdqu -24+96-128(%rsi),%ymm13
985 vpaddq %ymm0,%ymm1,%ymm1
986 vpmuludq %ymm10,%ymm12,%ymm12
987 vpbroadcastq %xmm11,%ymm11
988 vmovdqu -24+128-128(%rsi),%ymm0
989 vpaddq %ymm12,%ymm2,%ymm2
990 vpmuludq %ymm10,%ymm13,%ymm13
991 vmovdqu -24+160-128(%rsi),%ymm12
992 vpaddq %ymm13,%ymm3,%ymm3
993 vpmuludq %ymm10,%ymm0,%ymm0
994 vmovdqu -24+192-128(%rsi),%ymm13
995 vpaddq %ymm0,%ymm4,%ymm4
996 vpmuludq %ymm10,%ymm12,%ymm12
997 vmovdqu -24+224-128(%rsi),%ymm0
998 vpaddq %ymm12,%ymm5,%ymm5
999 vpmuludq %ymm10,%ymm13,%ymm13
1000 vmovdqu -24+256-128(%rsi),%ymm12
1001 vpaddq %ymm13,%ymm6,%ymm6
1002 vpmuludq %ymm10,%ymm0,%ymm0
1003 vmovdqu -24+288-128(%rsi),%ymm13
1004 vpaddq %ymm0,%ymm7,%ymm7
1005 vpmuludq %ymm10,%ymm12,%ymm12
1006 vpaddq %ymm12,%ymm8,%ymm8
1007 vpmuludq %ymm10,%ymm13,%ymm13
1008 vpbroadcastq 32(%r13),%ymm10
1009 vpaddq %ymm13,%ymm9,%ymm9
1010 addq $32,%r13
1011
1012 vmovdqu -24+32-128(%rcx),%ymm0
1013 imulq -128(%rcx),%rax
1014 addq %rax,%r12
1015 shrq $29,%r12
1016
1017 vmovdqu -24+64-128(%rcx),%ymm12
1018 vpmuludq %ymm11,%ymm0,%ymm0
1019 vmovq %xmm10,%rbx
1020 vmovdqu -24+96-128(%rcx),%ymm13
1021 vpaddq %ymm0,%ymm1,%ymm0
1022 vpmuludq %ymm11,%ymm12,%ymm12
1023 vmovdqu %ymm0,(%rsp)
1024 vpaddq %ymm12,%ymm2,%ymm1
1025 vmovdqu -24+128-128(%rcx),%ymm0
1026 vpmuludq %ymm11,%ymm13,%ymm13
1027 vmovdqu -24+160-128(%rcx),%ymm12
1028 vpaddq %ymm13,%ymm3,%ymm2
1029 vpmuludq %ymm11,%ymm0,%ymm0
1030 vmovdqu -24+192-128(%rcx),%ymm13
1031 vpaddq %ymm0,%ymm4,%ymm3
1032 vpmuludq %ymm11,%ymm12,%ymm12
1033 vmovdqu -24+224-128(%rcx),%ymm0
1034 vpaddq %ymm12,%ymm5,%ymm4
1035 vpmuludq %ymm11,%ymm13,%ymm13
1036 vmovdqu -24+256-128(%rcx),%ymm12
1037 vpaddq %ymm13,%ymm6,%ymm5
1038 vpmuludq %ymm11,%ymm0,%ymm0
1039 vmovdqu -24+288-128(%rcx),%ymm13
1040 movq %r12,%r9
1041 vpaddq %ymm0,%ymm7,%ymm6
1042 vpmuludq %ymm11,%ymm12,%ymm12
1043 addq (%rsp),%r9
1044 vpaddq %ymm12,%ymm8,%ymm7
1045 vpmuludq %ymm11,%ymm13,%ymm13
1046 vmovq %r12,%xmm12
1047 vpaddq %ymm13,%ymm9,%ymm8
1048
1049 decl %r14d
1050 jnz .Loop_mul_1024
1049 vpermq $0,%ymm15,%ymm15
1050 vpaddq (%rsp),%ymm12,%ymm0
1051
1052 vpsrlq $29,%ymm0,%ymm12
1053 vpand %ymm15,%ymm0,%ymm0
1054 vpsrlq $29,%ymm1,%ymm13
1055 vpand %ymm15,%ymm1,%ymm1
1056 vpsrlq $29,%ymm2,%ymm10
1057 vpermq $0x93,%ymm12,%ymm12
1058 vpand %ymm15,%ymm2,%ymm2
1059 vpsrlq $29,%ymm3,%ymm11
1060 vpermq $0x93,%ymm13,%ymm13
1061 vpand %ymm15,%ymm3,%ymm3
1062
1063 vpblendd $3,%ymm14,%ymm12,%ymm9
1064 vpermq $0x93,%ymm10,%ymm10
1065 vpblendd $3,%ymm12,%ymm13,%ymm12
1066 vpermq $0x93,%ymm11,%ymm11
1067 vpaddq %ymm9,%ymm0,%ymm0
1068 vpblendd $3,%ymm13,%ymm10,%ymm13
1069 vpaddq %ymm12,%ymm1,%ymm1
1070 vpblendd $3,%ymm10,%ymm11,%ymm10
1071 vpaddq %ymm13,%ymm2,%ymm2
1072 vpblendd $3,%ymm11,%ymm14,%ymm11
1073 vpaddq %ymm10,%ymm3,%ymm3
1074 vpaddq %ymm11,%ymm4,%ymm4
1075
1076 vpsrlq $29,%ymm0,%ymm12
1077 vpand %ymm15,%ymm0,%ymm0
1078 vpsrlq $29,%ymm1,%ymm13
1079 vpand %ymm15,%ymm1,%ymm1
1080 vpsrlq $29,%ymm2,%ymm10
1081 vpermq $0x93,%ymm12,%ymm12
1082 vpand %ymm15,%ymm2,%ymm2
1083 vpsrlq $29,%ymm3,%ymm11
1084 vpermq $0x93,%ymm13,%ymm13
1085 vpand %ymm15,%ymm3,%ymm3
1086 vpermq $0x93,%ymm10,%ymm10
1087
1088 vpblendd $3,%ymm14,%ymm12,%ymm9
1089 vpermq $0x93,%ymm11,%ymm11
1090 vpblendd $3,%ymm12,%ymm13,%ymm12
1091 vpaddq %ymm9,%ymm0,%ymm0
1092 vpblendd $3,%ymm13,%ymm10,%ymm13
1093 vpaddq %ymm12,%ymm1,%ymm1
1094 vpblendd $3,%ymm10,%ymm11,%ymm10
1095 vpaddq %ymm13,%ymm2,%ymm2
1096 vpblendd $3,%ymm11,%ymm14,%ymm11
1097 vpaddq %ymm10,%ymm3,%ymm3
1098 vpaddq %ymm11,%ymm4,%ymm4
1099
1100 vmovdqu %ymm0,0-128(%rdi)
1101 vmovdqu %ymm1,32-128(%rdi)
1102 vmovdqu %ymm2,64-128(%rdi)
1103 vmovdqu %ymm3,96-128(%rdi)
1104 vpsrlq $29,%ymm4,%ymm12
1105 vpand %ymm15,%ymm4,%ymm4
1106 vpsrlq $29,%ymm5,%ymm13
1107 vpand %ymm15,%ymm5,%ymm5
1108 vpsrlq $29,%ymm6,%ymm10
1109 vpermq $0x93,%ymm12,%ymm12
1110 vpand %ymm15,%ymm6,%ymm6
1111 vpsrlq $29,%ymm7,%ymm11
1112 vpermq $0x93,%ymm13,%ymm13
1113 vpand %ymm15,%ymm7,%ymm7
1114 vpsrlq $29,%ymm8,%ymm0
1115 vpermq $0x93,%ymm10,%ymm10
1116 vpand %ymm15,%ymm8,%ymm8
1117 vpermq $0x93,%ymm11,%ymm11
1118
1119 vpblendd $3,%ymm14,%ymm12,%ymm9
1120 vpermq $0x93,%ymm0,%ymm0
1121 vpblendd $3,%ymm12,%ymm13,%ymm12
1122 vpaddq %ymm9,%ymm4,%ymm4
1123 vpblendd $3,%ymm13,%ymm10,%ymm13
1124 vpaddq %ymm12,%ymm5,%ymm5
1125 vpblendd $3,%ymm10,%ymm11,%ymm10
1126 vpaddq %ymm13,%ymm6,%ymm6
1127 vpblendd $3,%ymm11,%ymm0,%ymm11
1128 vpaddq %ymm10,%ymm7,%ymm7
1129 vpaddq %ymm11,%ymm8,%ymm8
1130
1131 vpsrlq $29,%ymm4,%ymm12
1132 vpand %ymm15,%ymm4,%ymm4
1133 vpsrlq $29,%ymm5,%ymm13
1134 vpand %ymm15,%ymm5,%ymm5
1135 vpsrlq $29,%ymm6,%ymm10
1136 vpermq $0x93,%ymm12,%ymm12
1137 vpand %ymm15,%ymm6,%ymm6
1138 vpsrlq $29,%ymm7,%ymm11
1139 vpermq $0x93,%ymm13,%ymm13
1140 vpand %ymm15,%ymm7,%ymm7
1141 vpsrlq $29,%ymm8,%ymm0
1142 vpermq $0x93,%ymm10,%ymm10
1143 vpand %ymm15,%ymm8,%ymm8
1144 vpermq $0x93,%ymm11,%ymm11
1145
1146 vpblendd $3,%ymm14,%ymm12,%ymm9
1147 vpermq $0x93,%ymm0,%ymm0
1148 vpblendd $3,%ymm12,%ymm13,%ymm12
1149 vpaddq %ymm9,%ymm4,%ymm4
1150 vpblendd $3,%ymm13,%ymm10,%ymm13
1151 vpaddq %ymm12,%ymm5,%ymm5
1152 vpblendd $3,%ymm10,%ymm11,%ymm10
1153 vpaddq %ymm13,%ymm6,%ymm6
1154 vpblendd $3,%ymm11,%ymm0,%ymm11
1155 vpaddq %ymm10,%ymm7,%ymm7
1156 vpaddq %ymm11,%ymm8,%ymm8
1157
1158 vmovdqu %ymm4,128-128(%rdi)
1159 vmovdqu %ymm5,160-128(%rdi)
1160 vmovdqu %ymm6,192-128(%rdi)
1161 vmovdqu %ymm7,224-128(%rdi)
1162 vmovdqu %ymm8,256-128(%rdi)
1163 vzeroupper
1164
1165 movq %rbp,%rax
1166 movq -48(%rax),%r15
1167 movq -40(%rax),%r14
1168 movq -32(%rax),%r13
1169 movq -24(%rax),%r12
1170 movq -16(%rax),%rbp
1171 movq -8(%rax),%rbx
1172 leaq (%rax),%rsp
1173.Lmul_1024_epilogue:
1174 .byte 0xf3,0xc3
1175.size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2
1176.globl rsaz_1024_red2norm_avx2
1177.type rsaz_1024_red2norm_avx2,@function
1178.align 32
1179rsaz_1024_red2norm_avx2:
1180 subq $-128,%rsi
1181 xorq %rax,%rax
1182 movq -128(%rsi),%r8
1183 movq -120(%rsi),%r9
1184 movq -112(%rsi),%r10
1185 shlq $0,%r8
1186 shlq $29,%r9
1187 movq %r10,%r11
1188 shlq $58,%r10
1189 shrq $6,%r11
1190 addq %r8,%rax
1191 addq %r9,%rax
1192 addq %r10,%rax
1193 adcq $0,%r11
1194 movq %rax,0(%rdi)
1195 movq %r11,%rax
1196 movq -104(%rsi),%r8
1197 movq -96(%rsi),%r9
1198 shlq $23,%r8
1199 movq %r9,%r10
1200 shlq $52,%r9
1201 shrq $12,%r10
1202 addq %r8,%rax
1203 addq %r9,%rax
1204 adcq $0,%r10
1205 movq %rax,8(%rdi)
1206 movq %r10,%rax
1207 movq -88(%rsi),%r11
1208 movq -80(%rsi),%r8
1209 shlq $17,%r11
1210 movq %r8,%r9
1211 shlq $46,%r8
1212 shrq $18,%r9
1213 addq %r11,%rax
1214 addq %r8,%rax
1215 adcq $0,%r9
1216 movq %rax,16(%rdi)
1217 movq %r9,%rax
1218 movq -72(%rsi),%r10
1219 movq -64(%rsi),%r11
1220 shlq $11,%r10
1221 movq %r11,%r8
1222 shlq $40,%r11
1223 shrq $24,%r8
1224 addq %r10,%rax
1225 addq %r11,%rax
1226 adcq $0,%r8
1227 movq %rax,24(%rdi)
1228 movq %r8,%rax
1229 movq -56(%rsi),%r9
1230 movq -48(%rsi),%r10
1231 movq -40(%rsi),%r11
1232 shlq $5,%r9
1233 shlq $34,%r10
1234 movq %r11,%r8
1235 shlq $63,%r11
1236 shrq $1,%r8
1237 addq %r9,%rax
1238 addq %r10,%rax
1239 addq %r11,%rax
1240 adcq $0,%r8
1241 movq %rax,32(%rdi)
1242 movq %r8,%rax
1243 movq -32(%rsi),%r9
1244 movq -24(%rsi),%r10
1245 shlq $28,%r9
1246 movq %r10,%r11
1247 shlq $57,%r10
1248 shrq $7,%r11
1249 addq %r9,%rax
1250 addq %r10,%rax
1251 adcq $0,%r11
1252 movq %rax,40(%rdi)
1253 movq %r11,%rax
1254 movq -16(%rsi),%r8
1255 movq -8(%rsi),%r9
1256 shlq $22,%r8
1257 movq %r9,%r10
1258 shlq $51,%r9
1259 shrq $13,%r10
1260 addq %r8,%rax
1261 addq %r9,%rax
1262 adcq $0,%r10
1263 movq %rax,48(%rdi)
1264 movq %r10,%rax
1265 movq 0(%rsi),%r11
1266 movq 8(%rsi),%r8
1267 shlq $16,%r11
1268 movq %r8,%r9
1269 shlq $45,%r8
1270 shrq $19,%r9
1271 addq %r11,%rax
1272 addq %r8,%rax
1273 adcq $0,%r9
1274 movq %rax,56(%rdi)
1275 movq %r9,%rax
1276 movq 16(%rsi),%r10
1277 movq 24(%rsi),%r11
1278 shlq $10,%r10
1279 movq %r11,%r8
1280 shlq $39,%r11
1281 shrq $25,%r8
1282 addq %r10,%rax
1283 addq %r11,%rax
1284 adcq $0,%r8
1285 movq %rax,64(%rdi)
1286 movq %r8,%rax
1287 movq 32(%rsi),%r9
1288 movq 40(%rsi),%r10
1289 movq 48(%rsi),%r11
1290 shlq $4,%r9
1291 shlq $33,%r10
1292 movq %r11,%r8
1293 shlq $62,%r11
1294 shrq $2,%r8
1295 addq %r9,%rax
1296 addq %r10,%rax
1297 addq %r11,%rax
1298 adcq $0,%r8
1299 movq %rax,72(%rdi)
1300 movq %r8,%rax
1301 movq 56(%rsi),%r9
1302 movq 64(%rsi),%r10
1303 shlq $27,%r9
1304 movq %r10,%r11
1305 shlq $56,%r10
1306 shrq $8,%r11
1307 addq %r9,%rax
1308 addq %r10,%rax
1309 adcq $0,%r11
1310 movq %rax,80(%rdi)
1311 movq %r11,%rax
1312 movq 72(%rsi),%r8
1313 movq 80(%rsi),%r9
1314 shlq $21,%r8
1315 movq %r9,%r10
1316 shlq $50,%r9
1317 shrq $14,%r10
1318 addq %r8,%rax
1319 addq %r9,%rax
1320 adcq $0,%r10
1321 movq %rax,88(%rdi)
1322 movq %r10,%rax
1323 movq 88(%rsi),%r11
1324 movq 96(%rsi),%r8
1325 shlq $15,%r11
1326 movq %r8,%r9
1327 shlq $44,%r8
1328 shrq $20,%r9
1329 addq %r11,%rax
1330 addq %r8,%rax
1331 adcq $0,%r9
1332 movq %rax,96(%rdi)
1333 movq %r9,%rax
1334 movq 104(%rsi),%r10
1335 movq 112(%rsi),%r11
1336 shlq $9,%r10
1337 movq %r11,%r8
1338 shlq $38,%r11
1339 shrq $26,%r8
1340 addq %r10,%rax
1341 addq %r11,%rax
1342 adcq $0,%r8
1343 movq %rax,104(%rdi)
1344 movq %r8,%rax
1345 movq 120(%rsi),%r9
1346 movq 128(%rsi),%r10
1347 movq 136(%rsi),%r11
1348 shlq $3,%r9
1349 shlq $32,%r10
1350 movq %r11,%r8
1351 shlq $61,%r11
1352 shrq $3,%r8
1353 addq %r9,%rax
1354 addq %r10,%rax
1355 addq %r11,%rax
1356 adcq $0,%r8
1357 movq %rax,112(%rdi)
1358 movq %r8,%rax
1359 movq 144(%rsi),%r9
1360 movq 152(%rsi),%r10
1361 shlq $26,%r9
1362 movq %r10,%r11
1363 shlq $55,%r10
1364 shrq $9,%r11
1365 addq %r9,%rax
1366 addq %r10,%rax
1367 adcq $0,%r11
1368 movq %rax,120(%rdi)
1369 movq %r11,%rax
1370 .byte 0xf3,0xc3
1371.size rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
1372
1373.globl rsaz_1024_norm2red_avx2
1374.type rsaz_1024_norm2red_avx2,@function
1375.align 32
1376rsaz_1024_norm2red_avx2:
1377 subq $-128,%rdi
1378 movq (%rsi),%r8
1379 movl $0x1fffffff,%eax
1380 movq 8(%rsi),%r9
1381 movq %r8,%r11
1382 shrq $0,%r11
1383 andq %rax,%r11
1384 movq %r11,-128(%rdi)
1385 movq %r8,%r10
1386 shrq $29,%r10
1387 andq %rax,%r10
1388 movq %r10,-120(%rdi)
1389 shrdq $58,%r9,%r8
1390 andq %rax,%r8
1391 movq %r8,-112(%rdi)
1392 movq 16(%rsi),%r10
1393 movq %r9,%r8
1394 shrq $23,%r8
1395 andq %rax,%r8
1396 movq %r8,-104(%rdi)
1397 shrdq $52,%r10,%r9
1398 andq %rax,%r9
1399 movq %r9,-96(%rdi)
1400 movq 24(%rsi),%r11
1401 movq %r10,%r9
1402 shrq $17,%r9
1403 andq %rax,%r9
1404 movq %r9,-88(%rdi)
1405 shrdq $46,%r11,%r10
1406 andq %rax,%r10
1407 movq %r10,-80(%rdi)
1408 movq 32(%rsi),%r8
1409 movq %r11,%r10
1410 shrq $11,%r10
1411 andq %rax,%r10
1412 movq %r10,-72(%rdi)
1413 shrdq $40,%r8,%r11
1414 andq %rax,%r11
1415 movq %r11,-64(%rdi)
1416 movq 40(%rsi),%r9
1417 movq %r8,%r11
1418 shrq $5,%r11
1419 andq %rax,%r11
1420 movq %r11,-56(%rdi)
1421 movq %r8,%r10
1422 shrq $34,%r10
1423 andq %rax,%r10
1424 movq %r10,-48(%rdi)
1425 shrdq $63,%r9,%r8
1426 andq %rax,%r8
1427 movq %r8,-40(%rdi)
1428 movq 48(%rsi),%r10
1429 movq %r9,%r8
1430 shrq $28,%r8
1431 andq %rax,%r8
1432 movq %r8,-32(%rdi)
1433 shrdq $57,%r10,%r9
1434 andq %rax,%r9
1435 movq %r9,-24(%rdi)
1436 movq 56(%rsi),%r11
1437 movq %r10,%r9
1438 shrq $22,%r9
1439 andq %rax,%r9
1440 movq %r9,-16(%rdi)
1441 shrdq $51,%r11,%r10
1442 andq %rax,%r10
1443 movq %r10,-8(%rdi)
1444 movq 64(%rsi),%r8
1445 movq %r11,%r10
1446 shrq $16,%r10
1447 andq %rax,%r10
1448 movq %r10,0(%rdi)
1449 shrdq $45,%r8,%r11
1450 andq %rax,%r11
1451 movq %r11,8(%rdi)
1452 movq 72(%rsi),%r9
1453 movq %r8,%r11
1454 shrq $10,%r11
1455 andq %rax,%r11
1456 movq %r11,16(%rdi)
1457 shrdq $39,%r9,%r8
1458 andq %rax,%r8
1459 movq %r8,24(%rdi)
1460 movq 80(%rsi),%r10
1461 movq %r9,%r8
1462 shrq $4,%r8
1463 andq %rax,%r8
1464 movq %r8,32(%rdi)
1465 movq %r9,%r11
1466 shrq $33,%r11
1467 andq %rax,%r11
1468 movq %r11,40(%rdi)
1469 shrdq $62,%r10,%r9
1470 andq %rax,%r9
1471 movq %r9,48(%rdi)
1472 movq 88(%rsi),%r11
1473 movq %r10,%r9
1474 shrq $27,%r9
1475 andq %rax,%r9
1476 movq %r9,56(%rdi)
1477 shrdq $56,%r11,%r10
1478 andq %rax,%r10
1479 movq %r10,64(%rdi)
1480 movq 96(%rsi),%r8
1481 movq %r11,%r10
1482 shrq $21,%r10
1483 andq %rax,%r10
1484 movq %r10,72(%rdi)
1485 shrdq $50,%r8,%r11
1486 andq %rax,%r11
1487 movq %r11,80(%rdi)
1488 movq 104(%rsi),%r9
1489 movq %r8,%r11
1490 shrq $15,%r11
1491 andq %rax,%r11
1492 movq %r11,88(%rdi)
1493 shrdq $44,%r9,%r8
1494 andq %rax,%r8
1495 movq %r8,96(%rdi)
1496 movq 112(%rsi),%r10
1497 movq %r9,%r8
1498 shrq $9,%r8
1499 andq %rax,%r8
1500 movq %r8,104(%rdi)
1501 shrdq $38,%r10,%r9
1502 andq %rax,%r9
1503 movq %r9,112(%rdi)
1504 movq 120(%rsi),%r11
1505 movq %r10,%r9
1506 shrq $3,%r9
1507 andq %rax,%r9
1508 movq %r9,120(%rdi)
1509 movq %r10,%r8
1510 shrq $32,%r8
1511 andq %rax,%r8
1512 movq %r8,128(%rdi)
1513 shrdq $61,%r11,%r10
1514 andq %rax,%r10
1515 movq %r10,136(%rdi)
1516 xorq %r8,%r8
1517 movq %r11,%r10
1518 shrq $26,%r10
1519 andq %rax,%r10
1520 movq %r10,144(%rdi)
1521 shrdq $55,%r8,%r11
1522 andq %rax,%r11
1523 movq %r11,152(%rdi)
1524 movq %r8,160(%rdi)
1525 movq %r8,168(%rdi)
1526 movq %r8,176(%rdi)
1527 movq %r8,184(%rdi)
1528 .byte 0xf3,0xc3
1529.size rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
1530.globl rsaz_1024_scatter5_avx2
1531.type rsaz_1024_scatter5_avx2,@function
1532.align 32
1533rsaz_1024_scatter5_avx2:
1534 vzeroupper
1535 vmovdqu .Lscatter_permd(%rip),%ymm5
1536 shll $4,%edx
1537 leaq (%rdi,%rdx,1),%rdi
1538 movl $9,%eax
1539 jmp .Loop_scatter_1024
1540
1541.align 32
1542.Loop_scatter_1024:
1543 vmovdqu (%rsi),%ymm0
1544 leaq 32(%rsi),%rsi
1545 vpermd %ymm0,%ymm5,%ymm0
1546 vmovdqu %xmm0,(%rdi)
1547 leaq 512(%rdi),%rdi
1548 decl %eax
1549 jnz .Loop_scatter_1024
1550
1551 vzeroupper
1552 .byte 0xf3,0xc3
1553.size rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
1554
1555.globl rsaz_1024_gather5_avx2
1556.type rsaz_1024_gather5_avx2,@function
1557.align 32
1558rsaz_1024_gather5_avx2:
1559 vzeroupper
1560 movq %rsp,%r11
1561 leaq -256(%rsp),%rsp
1562 andq $-32,%rsp
1563 leaq .Linc(%rip),%r10
1564 leaq -128(%rsp),%rax
1565
1566 vmovd %edx,%xmm4
1567 vmovdqa (%r10),%ymm0
1568 vmovdqa 32(%r10),%ymm1
1569 vmovdqa 64(%r10),%ymm5
1570 vpbroadcastd %xmm4,%ymm4
1571
1572 vpaddd %ymm5,%ymm0,%ymm2
1573 vpcmpeqd %ymm4,%ymm0,%ymm0
1574 vpaddd %ymm5,%ymm1,%ymm3
1575 vpcmpeqd %ymm4,%ymm1,%ymm1
1576 vmovdqa %ymm0,0+128(%rax)
1577 vpaddd %ymm5,%ymm2,%ymm0
1578 vpcmpeqd %ymm4,%ymm2,%ymm2
1579 vmovdqa %ymm1,32+128(%rax)
1580 vpaddd %ymm5,%ymm3,%ymm1
1581 vpcmpeqd %ymm4,%ymm3,%ymm3
1582 vmovdqa %ymm2,64+128(%rax)
1583 vpaddd %ymm5,%ymm0,%ymm2
1584 vpcmpeqd %ymm4,%ymm0,%ymm0
1585 vmovdqa %ymm3,96+128(%rax)
1586 vpaddd %ymm5,%ymm1,%ymm3
1587 vpcmpeqd %ymm4,%ymm1,%ymm1
1588 vmovdqa %ymm0,128+128(%rax)
1589 vpaddd %ymm5,%ymm2,%ymm8
1590 vpcmpeqd %ymm4,%ymm2,%ymm2
1591 vmovdqa %ymm1,160+128(%rax)
1592 vpaddd %ymm5,%ymm3,%ymm9
1593 vpcmpeqd %ymm4,%ymm3,%ymm3
1594 vmovdqa %ymm2,192+128(%rax)
1595 vpaddd %ymm5,%ymm8,%ymm10
1596 vpcmpeqd %ymm4,%ymm8,%ymm8
1597 vmovdqa %ymm3,224+128(%rax)
1598 vpaddd %ymm5,%ymm9,%ymm11
1599 vpcmpeqd %ymm4,%ymm9,%ymm9
1600 vpaddd %ymm5,%ymm10,%ymm12
1601 vpcmpeqd %ymm4,%ymm10,%ymm10
1602 vpaddd %ymm5,%ymm11,%ymm13
1603 vpcmpeqd %ymm4,%ymm11,%ymm11
1604 vpaddd %ymm5,%ymm12,%ymm14
1605 vpcmpeqd %ymm4,%ymm12,%ymm12
1606 vpaddd %ymm5,%ymm13,%ymm15
1607 vpcmpeqd %ymm4,%ymm13,%ymm13
1608 vpcmpeqd %ymm4,%ymm14,%ymm14
1609 vpcmpeqd %ymm4,%ymm15,%ymm15
1610
1611 vmovdqa -32(%r10),%ymm7
1612 leaq 128(%rsi),%rsi
1613 movl $9,%edx
1614
1615.Loop_gather_1024:
1616 vmovdqa 0-128(%rsi),%ymm0
1617 vmovdqa 32-128(%rsi),%ymm1
1618 vmovdqa 64-128(%rsi),%ymm2
1619 vmovdqa 96-128(%rsi),%ymm3
1620 vpand 0+128(%rax),%ymm0,%ymm0
1621 vpand 32+128(%rax),%ymm1,%ymm1
1622 vpand 64+128(%rax),%ymm2,%ymm2
1623 vpor %ymm0,%ymm1,%ymm4
1624 vpand 96+128(%rax),%ymm3,%ymm3
1625 vmovdqa 128-128(%rsi),%ymm0
1626 vmovdqa 160-128(%rsi),%ymm1
1627 vpor %ymm2,%ymm3,%ymm5
1628 vmovdqa 192-128(%rsi),%ymm2
1629 vmovdqa 224-128(%rsi),%ymm3
1630 vpand 128+128(%rax),%ymm0,%ymm0
1631 vpand 160+128(%rax),%ymm1,%ymm1
1632 vpand 192+128(%rax),%ymm2,%ymm2
1633 vpor %ymm0,%ymm4,%ymm4
1634 vpand 224+128(%rax),%ymm3,%ymm3
1635 vpand 256-128(%rsi),%ymm8,%ymm0
1636 vpor %ymm1,%ymm5,%ymm5
1637 vpand 288-128(%rsi),%ymm9,%ymm1
1638 vpor %ymm2,%ymm4,%ymm4
1639 vpand 320-128(%rsi),%ymm10,%ymm2
1640 vpor %ymm3,%ymm5,%ymm5
1641 vpand 352-128(%rsi),%ymm11,%ymm3
1642 vpor %ymm0,%ymm4,%ymm4
1643 vpand 384-128(%rsi),%ymm12,%ymm0
1644 vpor %ymm1,%ymm5,%ymm5
1645 vpand 416-128(%rsi),%ymm13,%ymm1
1646 vpor %ymm2,%ymm4,%ymm4
1647 vpand 448-128(%rsi),%ymm14,%ymm2
1648 vpor %ymm3,%ymm5,%ymm5
1649 vpand 480-128(%rsi),%ymm15,%ymm3
1650 leaq 512(%rsi),%rsi
1651 vpor %ymm0,%ymm4,%ymm4
1652 vpor %ymm1,%ymm5,%ymm5
1653 vpor %ymm2,%ymm4,%ymm4
1654 vpor %ymm3,%ymm5,%ymm5
1655
1656 vpor %ymm5,%ymm4,%ymm4
1657 vextracti128 $1,%ymm4,%xmm5
1658 vpor %xmm4,%xmm5,%xmm5
1659 vpermd %ymm5,%ymm7,%ymm5
1660 vmovdqu %ymm5,(%rdi)
1661 leaq 32(%rdi),%rdi
1662 decl %edx
1663 jnz .Loop_gather_1024
1664
1665 vpxor %ymm0,%ymm0,%ymm0
1666 vmovdqu %ymm0,(%rdi)
1667 vzeroupper
1668 leaq (%r11),%rsp
1669 .byte 0xf3,0xc3
1670.size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
1671
1672.globl rsaz_avx2_eligible
1673.type rsaz_avx2_eligible,@function
1674.align 32
1675rsaz_avx2_eligible:
1676 movl OPENSSL_ia32cap_P+8(%rip),%eax
1677 movl $524544,%ecx
1678 movl $0,%edx
1679 andl %eax,%ecx
1680 cmpl $524544,%ecx
1681 cmovel %edx,%eax
1682 andl $32,%eax
1683 shrl $5,%eax
1684 .byte 0xf3,0xc3
1685.size rsaz_avx2_eligible,.-rsaz_avx2_eligible
1686
1687.align 64
1688.Land_mask:
1051 vpaddq (%rsp),%ymm12,%ymm0
1052
1053 vpsrlq $29,%ymm0,%ymm12
1054 vpand %ymm15,%ymm0,%ymm0
1055 vpsrlq $29,%ymm1,%ymm13
1056 vpand %ymm15,%ymm1,%ymm1
1057 vpsrlq $29,%ymm2,%ymm10
1058 vpermq $0x93,%ymm12,%ymm12
1059 vpand %ymm15,%ymm2,%ymm2
1060 vpsrlq $29,%ymm3,%ymm11
1061 vpermq $0x93,%ymm13,%ymm13
1062 vpand %ymm15,%ymm3,%ymm3
1063
1064 vpblendd $3,%ymm14,%ymm12,%ymm9
1065 vpermq $0x93,%ymm10,%ymm10
1066 vpblendd $3,%ymm12,%ymm13,%ymm12
1067 vpermq $0x93,%ymm11,%ymm11
1068 vpaddq %ymm9,%ymm0,%ymm0
1069 vpblendd $3,%ymm13,%ymm10,%ymm13
1070 vpaddq %ymm12,%ymm1,%ymm1
1071 vpblendd $3,%ymm10,%ymm11,%ymm10
1072 vpaddq %ymm13,%ymm2,%ymm2
1073 vpblendd $3,%ymm11,%ymm14,%ymm11
1074 vpaddq %ymm10,%ymm3,%ymm3
1075 vpaddq %ymm11,%ymm4,%ymm4
1076
1077 vpsrlq $29,%ymm0,%ymm12
1078 vpand %ymm15,%ymm0,%ymm0
1079 vpsrlq $29,%ymm1,%ymm13
1080 vpand %ymm15,%ymm1,%ymm1
1081 vpsrlq $29,%ymm2,%ymm10
1082 vpermq $0x93,%ymm12,%ymm12
1083 vpand %ymm15,%ymm2,%ymm2
1084 vpsrlq $29,%ymm3,%ymm11
1085 vpermq $0x93,%ymm13,%ymm13
1086 vpand %ymm15,%ymm3,%ymm3
1087 vpermq $0x93,%ymm10,%ymm10
1088
1089 vpblendd $3,%ymm14,%ymm12,%ymm9
1090 vpermq $0x93,%ymm11,%ymm11
1091 vpblendd $3,%ymm12,%ymm13,%ymm12
1092 vpaddq %ymm9,%ymm0,%ymm0
1093 vpblendd $3,%ymm13,%ymm10,%ymm13
1094 vpaddq %ymm12,%ymm1,%ymm1
1095 vpblendd $3,%ymm10,%ymm11,%ymm10
1096 vpaddq %ymm13,%ymm2,%ymm2
1097 vpblendd $3,%ymm11,%ymm14,%ymm11
1098 vpaddq %ymm10,%ymm3,%ymm3
1099 vpaddq %ymm11,%ymm4,%ymm4
1100
1101 vmovdqu %ymm0,0-128(%rdi)
1102 vmovdqu %ymm1,32-128(%rdi)
1103 vmovdqu %ymm2,64-128(%rdi)
1104 vmovdqu %ymm3,96-128(%rdi)
1105 vpsrlq $29,%ymm4,%ymm12
1106 vpand %ymm15,%ymm4,%ymm4
1107 vpsrlq $29,%ymm5,%ymm13
1108 vpand %ymm15,%ymm5,%ymm5
1109 vpsrlq $29,%ymm6,%ymm10
1110 vpermq $0x93,%ymm12,%ymm12
1111 vpand %ymm15,%ymm6,%ymm6
1112 vpsrlq $29,%ymm7,%ymm11
1113 vpermq $0x93,%ymm13,%ymm13
1114 vpand %ymm15,%ymm7,%ymm7
1115 vpsrlq $29,%ymm8,%ymm0
1116 vpermq $0x93,%ymm10,%ymm10
1117 vpand %ymm15,%ymm8,%ymm8
1118 vpermq $0x93,%ymm11,%ymm11
1119
1120 vpblendd $3,%ymm14,%ymm12,%ymm9
1121 vpermq $0x93,%ymm0,%ymm0
1122 vpblendd $3,%ymm12,%ymm13,%ymm12
1123 vpaddq %ymm9,%ymm4,%ymm4
1124 vpblendd $3,%ymm13,%ymm10,%ymm13
1125 vpaddq %ymm12,%ymm5,%ymm5
1126 vpblendd $3,%ymm10,%ymm11,%ymm10
1127 vpaddq %ymm13,%ymm6,%ymm6
1128 vpblendd $3,%ymm11,%ymm0,%ymm11
1129 vpaddq %ymm10,%ymm7,%ymm7
1130 vpaddq %ymm11,%ymm8,%ymm8
1131
1132 vpsrlq $29,%ymm4,%ymm12
1133 vpand %ymm15,%ymm4,%ymm4
1134 vpsrlq $29,%ymm5,%ymm13
1135 vpand %ymm15,%ymm5,%ymm5
1136 vpsrlq $29,%ymm6,%ymm10
1137 vpermq $0x93,%ymm12,%ymm12
1138 vpand %ymm15,%ymm6,%ymm6
1139 vpsrlq $29,%ymm7,%ymm11
1140 vpermq $0x93,%ymm13,%ymm13
1141 vpand %ymm15,%ymm7,%ymm7
1142 vpsrlq $29,%ymm8,%ymm0
1143 vpermq $0x93,%ymm10,%ymm10
1144 vpand %ymm15,%ymm8,%ymm8
1145 vpermq $0x93,%ymm11,%ymm11
1146
1147 vpblendd $3,%ymm14,%ymm12,%ymm9
1148 vpermq $0x93,%ymm0,%ymm0
1149 vpblendd $3,%ymm12,%ymm13,%ymm12
1150 vpaddq %ymm9,%ymm4,%ymm4
1151 vpblendd $3,%ymm13,%ymm10,%ymm13
1152 vpaddq %ymm12,%ymm5,%ymm5
1153 vpblendd $3,%ymm10,%ymm11,%ymm10
1154 vpaddq %ymm13,%ymm6,%ymm6
1155 vpblendd $3,%ymm11,%ymm0,%ymm11
1156 vpaddq %ymm10,%ymm7,%ymm7
1157 vpaddq %ymm11,%ymm8,%ymm8
1158
1159 vmovdqu %ymm4,128-128(%rdi)
1160 vmovdqu %ymm5,160-128(%rdi)
1161 vmovdqu %ymm6,192-128(%rdi)
1162 vmovdqu %ymm7,224-128(%rdi)
1163 vmovdqu %ymm8,256-128(%rdi)
1164 vzeroupper
1165
1166 movq %rbp,%rax
1167 movq -48(%rax),%r15
1168 movq -40(%rax),%r14
1169 movq -32(%rax),%r13
1170 movq -24(%rax),%r12
1171 movq -16(%rax),%rbp
1172 movq -8(%rax),%rbx
1173 leaq (%rax),%rsp
1174.Lmul_1024_epilogue:
1175 .byte 0xf3,0xc3
1176.size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2
1177.globl rsaz_1024_red2norm_avx2
1178.type rsaz_1024_red2norm_avx2,@function
1179.align 32
1180rsaz_1024_red2norm_avx2:
1181 subq $-128,%rsi
1182 xorq %rax,%rax
1183 movq -128(%rsi),%r8
1184 movq -120(%rsi),%r9
1185 movq -112(%rsi),%r10
1186 shlq $0,%r8
1187 shlq $29,%r9
1188 movq %r10,%r11
1189 shlq $58,%r10
1190 shrq $6,%r11
1191 addq %r8,%rax
1192 addq %r9,%rax
1193 addq %r10,%rax
1194 adcq $0,%r11
1195 movq %rax,0(%rdi)
1196 movq %r11,%rax
1197 movq -104(%rsi),%r8
1198 movq -96(%rsi),%r9
1199 shlq $23,%r8
1200 movq %r9,%r10
1201 shlq $52,%r9
1202 shrq $12,%r10
1203 addq %r8,%rax
1204 addq %r9,%rax
1205 adcq $0,%r10
1206 movq %rax,8(%rdi)
1207 movq %r10,%rax
1208 movq -88(%rsi),%r11
1209 movq -80(%rsi),%r8
1210 shlq $17,%r11
1211 movq %r8,%r9
1212 shlq $46,%r8
1213 shrq $18,%r9
1214 addq %r11,%rax
1215 addq %r8,%rax
1216 adcq $0,%r9
1217 movq %rax,16(%rdi)
1218 movq %r9,%rax
1219 movq -72(%rsi),%r10
1220 movq -64(%rsi),%r11
1221 shlq $11,%r10
1222 movq %r11,%r8
1223 shlq $40,%r11
1224 shrq $24,%r8
1225 addq %r10,%rax
1226 addq %r11,%rax
1227 adcq $0,%r8
1228 movq %rax,24(%rdi)
1229 movq %r8,%rax
1230 movq -56(%rsi),%r9
1231 movq -48(%rsi),%r10
1232 movq -40(%rsi),%r11
1233 shlq $5,%r9
1234 shlq $34,%r10
1235 movq %r11,%r8
1236 shlq $63,%r11
1237 shrq $1,%r8
1238 addq %r9,%rax
1239 addq %r10,%rax
1240 addq %r11,%rax
1241 adcq $0,%r8
1242 movq %rax,32(%rdi)
1243 movq %r8,%rax
1244 movq -32(%rsi),%r9
1245 movq -24(%rsi),%r10
1246 shlq $28,%r9
1247 movq %r10,%r11
1248 shlq $57,%r10
1249 shrq $7,%r11
1250 addq %r9,%rax
1251 addq %r10,%rax
1252 adcq $0,%r11
1253 movq %rax,40(%rdi)
1254 movq %r11,%rax
1255 movq -16(%rsi),%r8
1256 movq -8(%rsi),%r9
1257 shlq $22,%r8
1258 movq %r9,%r10
1259 shlq $51,%r9
1260 shrq $13,%r10
1261 addq %r8,%rax
1262 addq %r9,%rax
1263 adcq $0,%r10
1264 movq %rax,48(%rdi)
1265 movq %r10,%rax
1266 movq 0(%rsi),%r11
1267 movq 8(%rsi),%r8
1268 shlq $16,%r11
1269 movq %r8,%r9
1270 shlq $45,%r8
1271 shrq $19,%r9
1272 addq %r11,%rax
1273 addq %r8,%rax
1274 adcq $0,%r9
1275 movq %rax,56(%rdi)
1276 movq %r9,%rax
1277 movq 16(%rsi),%r10
1278 movq 24(%rsi),%r11
1279 shlq $10,%r10
1280 movq %r11,%r8
1281 shlq $39,%r11
1282 shrq $25,%r8
1283 addq %r10,%rax
1284 addq %r11,%rax
1285 adcq $0,%r8
1286 movq %rax,64(%rdi)
1287 movq %r8,%rax
1288 movq 32(%rsi),%r9
1289 movq 40(%rsi),%r10
1290 movq 48(%rsi),%r11
1291 shlq $4,%r9
1292 shlq $33,%r10
1293 movq %r11,%r8
1294 shlq $62,%r11
1295 shrq $2,%r8
1296 addq %r9,%rax
1297 addq %r10,%rax
1298 addq %r11,%rax
1299 adcq $0,%r8
1300 movq %rax,72(%rdi)
1301 movq %r8,%rax
1302 movq 56(%rsi),%r9
1303 movq 64(%rsi),%r10
1304 shlq $27,%r9
1305 movq %r10,%r11
1306 shlq $56,%r10
1307 shrq $8,%r11
1308 addq %r9,%rax
1309 addq %r10,%rax
1310 adcq $0,%r11
1311 movq %rax,80(%rdi)
1312 movq %r11,%rax
1313 movq 72(%rsi),%r8
1314 movq 80(%rsi),%r9
1315 shlq $21,%r8
1316 movq %r9,%r10
1317 shlq $50,%r9
1318 shrq $14,%r10
1319 addq %r8,%rax
1320 addq %r9,%rax
1321 adcq $0,%r10
1322 movq %rax,88(%rdi)
1323 movq %r10,%rax
1324 movq 88(%rsi),%r11
1325 movq 96(%rsi),%r8
1326 shlq $15,%r11
1327 movq %r8,%r9
1328 shlq $44,%r8
1329 shrq $20,%r9
1330 addq %r11,%rax
1331 addq %r8,%rax
1332 adcq $0,%r9
1333 movq %rax,96(%rdi)
1334 movq %r9,%rax
1335 movq 104(%rsi),%r10
1336 movq 112(%rsi),%r11
1337 shlq $9,%r10
1338 movq %r11,%r8
1339 shlq $38,%r11
1340 shrq $26,%r8
1341 addq %r10,%rax
1342 addq %r11,%rax
1343 adcq $0,%r8
1344 movq %rax,104(%rdi)
1345 movq %r8,%rax
1346 movq 120(%rsi),%r9
1347 movq 128(%rsi),%r10
1348 movq 136(%rsi),%r11
1349 shlq $3,%r9
1350 shlq $32,%r10
1351 movq %r11,%r8
1352 shlq $61,%r11
1353 shrq $3,%r8
1354 addq %r9,%rax
1355 addq %r10,%rax
1356 addq %r11,%rax
1357 adcq $0,%r8
1358 movq %rax,112(%rdi)
1359 movq %r8,%rax
1360 movq 144(%rsi),%r9
1361 movq 152(%rsi),%r10
1362 shlq $26,%r9
1363 movq %r10,%r11
1364 shlq $55,%r10
1365 shrq $9,%r11
1366 addq %r9,%rax
1367 addq %r10,%rax
1368 adcq $0,%r11
1369 movq %rax,120(%rdi)
1370 movq %r11,%rax
1371 .byte 0xf3,0xc3
1372.size rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
1373
1374.globl rsaz_1024_norm2red_avx2
1375.type rsaz_1024_norm2red_avx2,@function
1376.align 32
1377rsaz_1024_norm2red_avx2:
1378 subq $-128,%rdi
1379 movq (%rsi),%r8
1380 movl $0x1fffffff,%eax
1381 movq 8(%rsi),%r9
1382 movq %r8,%r11
1383 shrq $0,%r11
1384 andq %rax,%r11
1385 movq %r11,-128(%rdi)
1386 movq %r8,%r10
1387 shrq $29,%r10
1388 andq %rax,%r10
1389 movq %r10,-120(%rdi)
1390 shrdq $58,%r9,%r8
1391 andq %rax,%r8
1392 movq %r8,-112(%rdi)
1393 movq 16(%rsi),%r10
1394 movq %r9,%r8
1395 shrq $23,%r8
1396 andq %rax,%r8
1397 movq %r8,-104(%rdi)
1398 shrdq $52,%r10,%r9
1399 andq %rax,%r9
1400 movq %r9,-96(%rdi)
1401 movq 24(%rsi),%r11
1402 movq %r10,%r9
1403 shrq $17,%r9
1404 andq %rax,%r9
1405 movq %r9,-88(%rdi)
1406 shrdq $46,%r11,%r10
1407 andq %rax,%r10
1408 movq %r10,-80(%rdi)
1409 movq 32(%rsi),%r8
1410 movq %r11,%r10
1411 shrq $11,%r10
1412 andq %rax,%r10
1413 movq %r10,-72(%rdi)
1414 shrdq $40,%r8,%r11
1415 andq %rax,%r11
1416 movq %r11,-64(%rdi)
1417 movq 40(%rsi),%r9
1418 movq %r8,%r11
1419 shrq $5,%r11
1420 andq %rax,%r11
1421 movq %r11,-56(%rdi)
1422 movq %r8,%r10
1423 shrq $34,%r10
1424 andq %rax,%r10
1425 movq %r10,-48(%rdi)
1426 shrdq $63,%r9,%r8
1427 andq %rax,%r8
1428 movq %r8,-40(%rdi)
1429 movq 48(%rsi),%r10
1430 movq %r9,%r8
1431 shrq $28,%r8
1432 andq %rax,%r8
1433 movq %r8,-32(%rdi)
1434 shrdq $57,%r10,%r9
1435 andq %rax,%r9
1436 movq %r9,-24(%rdi)
1437 movq 56(%rsi),%r11
1438 movq %r10,%r9
1439 shrq $22,%r9
1440 andq %rax,%r9
1441 movq %r9,-16(%rdi)
1442 shrdq $51,%r11,%r10
1443 andq %rax,%r10
1444 movq %r10,-8(%rdi)
1445 movq 64(%rsi),%r8
1446 movq %r11,%r10
1447 shrq $16,%r10
1448 andq %rax,%r10
1449 movq %r10,0(%rdi)
1450 shrdq $45,%r8,%r11
1451 andq %rax,%r11
1452 movq %r11,8(%rdi)
1453 movq 72(%rsi),%r9
1454 movq %r8,%r11
1455 shrq $10,%r11
1456 andq %rax,%r11
1457 movq %r11,16(%rdi)
1458 shrdq $39,%r9,%r8
1459 andq %rax,%r8
1460 movq %r8,24(%rdi)
1461 movq 80(%rsi),%r10
1462 movq %r9,%r8
1463 shrq $4,%r8
1464 andq %rax,%r8
1465 movq %r8,32(%rdi)
1466 movq %r9,%r11
1467 shrq $33,%r11
1468 andq %rax,%r11
1469 movq %r11,40(%rdi)
1470 shrdq $62,%r10,%r9
1471 andq %rax,%r9
1472 movq %r9,48(%rdi)
1473 movq 88(%rsi),%r11
1474 movq %r10,%r9
1475 shrq $27,%r9
1476 andq %rax,%r9
1477 movq %r9,56(%rdi)
1478 shrdq $56,%r11,%r10
1479 andq %rax,%r10
1480 movq %r10,64(%rdi)
1481 movq 96(%rsi),%r8
1482 movq %r11,%r10
1483 shrq $21,%r10
1484 andq %rax,%r10
1485 movq %r10,72(%rdi)
1486 shrdq $50,%r8,%r11
1487 andq %rax,%r11
1488 movq %r11,80(%rdi)
1489 movq 104(%rsi),%r9
1490 movq %r8,%r11
1491 shrq $15,%r11
1492 andq %rax,%r11
1493 movq %r11,88(%rdi)
1494 shrdq $44,%r9,%r8
1495 andq %rax,%r8
1496 movq %r8,96(%rdi)
1497 movq 112(%rsi),%r10
1498 movq %r9,%r8
1499 shrq $9,%r8
1500 andq %rax,%r8
1501 movq %r8,104(%rdi)
1502 shrdq $38,%r10,%r9
1503 andq %rax,%r9
1504 movq %r9,112(%rdi)
1505 movq 120(%rsi),%r11
1506 movq %r10,%r9
1507 shrq $3,%r9
1508 andq %rax,%r9
1509 movq %r9,120(%rdi)
1510 movq %r10,%r8
1511 shrq $32,%r8
1512 andq %rax,%r8
1513 movq %r8,128(%rdi)
1514 shrdq $61,%r11,%r10
1515 andq %rax,%r10
1516 movq %r10,136(%rdi)
1517 xorq %r8,%r8
1518 movq %r11,%r10
1519 shrq $26,%r10
1520 andq %rax,%r10
1521 movq %r10,144(%rdi)
1522 shrdq $55,%r8,%r11
1523 andq %rax,%r11
1524 movq %r11,152(%rdi)
1525 movq %r8,160(%rdi)
1526 movq %r8,168(%rdi)
1527 movq %r8,176(%rdi)
1528 movq %r8,184(%rdi)
1529 .byte 0xf3,0xc3
1530.size rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
1531.globl rsaz_1024_scatter5_avx2
1532.type rsaz_1024_scatter5_avx2,@function
1533.align 32
1534rsaz_1024_scatter5_avx2:
1535 vzeroupper
1536 vmovdqu .Lscatter_permd(%rip),%ymm5
1537 shll $4,%edx
1538 leaq (%rdi,%rdx,1),%rdi
1539 movl $9,%eax
1540 jmp .Loop_scatter_1024
1541
1542.align 32
1543.Loop_scatter_1024:
1544 vmovdqu (%rsi),%ymm0
1545 leaq 32(%rsi),%rsi
1546 vpermd %ymm0,%ymm5,%ymm0
1547 vmovdqu %xmm0,(%rdi)
1548 leaq 512(%rdi),%rdi
1549 decl %eax
1550 jnz .Loop_scatter_1024
1551
1552 vzeroupper
1553 .byte 0xf3,0xc3
1554.size rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
1555
1556.globl rsaz_1024_gather5_avx2
1557.type rsaz_1024_gather5_avx2,@function
1558.align 32
1559rsaz_1024_gather5_avx2:
1560 vzeroupper
1561 movq %rsp,%r11
1562 leaq -256(%rsp),%rsp
1563 andq $-32,%rsp
1564 leaq .Linc(%rip),%r10
1565 leaq -128(%rsp),%rax
1566
1567 vmovd %edx,%xmm4
1568 vmovdqa (%r10),%ymm0
1569 vmovdqa 32(%r10),%ymm1
1570 vmovdqa 64(%r10),%ymm5
1571 vpbroadcastd %xmm4,%ymm4
1572
1573 vpaddd %ymm5,%ymm0,%ymm2
1574 vpcmpeqd %ymm4,%ymm0,%ymm0
1575 vpaddd %ymm5,%ymm1,%ymm3
1576 vpcmpeqd %ymm4,%ymm1,%ymm1
1577 vmovdqa %ymm0,0+128(%rax)
1578 vpaddd %ymm5,%ymm2,%ymm0
1579 vpcmpeqd %ymm4,%ymm2,%ymm2
1580 vmovdqa %ymm1,32+128(%rax)
1581 vpaddd %ymm5,%ymm3,%ymm1
1582 vpcmpeqd %ymm4,%ymm3,%ymm3
1583 vmovdqa %ymm2,64+128(%rax)
1584 vpaddd %ymm5,%ymm0,%ymm2
1585 vpcmpeqd %ymm4,%ymm0,%ymm0
1586 vmovdqa %ymm3,96+128(%rax)
1587 vpaddd %ymm5,%ymm1,%ymm3
1588 vpcmpeqd %ymm4,%ymm1,%ymm1
1589 vmovdqa %ymm0,128+128(%rax)
1590 vpaddd %ymm5,%ymm2,%ymm8
1591 vpcmpeqd %ymm4,%ymm2,%ymm2
1592 vmovdqa %ymm1,160+128(%rax)
1593 vpaddd %ymm5,%ymm3,%ymm9
1594 vpcmpeqd %ymm4,%ymm3,%ymm3
1595 vmovdqa %ymm2,192+128(%rax)
1596 vpaddd %ymm5,%ymm8,%ymm10
1597 vpcmpeqd %ymm4,%ymm8,%ymm8
1598 vmovdqa %ymm3,224+128(%rax)
1599 vpaddd %ymm5,%ymm9,%ymm11
1600 vpcmpeqd %ymm4,%ymm9,%ymm9
1601 vpaddd %ymm5,%ymm10,%ymm12
1602 vpcmpeqd %ymm4,%ymm10,%ymm10
1603 vpaddd %ymm5,%ymm11,%ymm13
1604 vpcmpeqd %ymm4,%ymm11,%ymm11
1605 vpaddd %ymm5,%ymm12,%ymm14
1606 vpcmpeqd %ymm4,%ymm12,%ymm12
1607 vpaddd %ymm5,%ymm13,%ymm15
1608 vpcmpeqd %ymm4,%ymm13,%ymm13
1609 vpcmpeqd %ymm4,%ymm14,%ymm14
1610 vpcmpeqd %ymm4,%ymm15,%ymm15
1611
1612 vmovdqa -32(%r10),%ymm7
1613 leaq 128(%rsi),%rsi
1614 movl $9,%edx
1615
1616.Loop_gather_1024:
1617 vmovdqa 0-128(%rsi),%ymm0
1618 vmovdqa 32-128(%rsi),%ymm1
1619 vmovdqa 64-128(%rsi),%ymm2
1620 vmovdqa 96-128(%rsi),%ymm3
1621 vpand 0+128(%rax),%ymm0,%ymm0
1622 vpand 32+128(%rax),%ymm1,%ymm1
1623 vpand 64+128(%rax),%ymm2,%ymm2
1624 vpor %ymm0,%ymm1,%ymm4
1625 vpand 96+128(%rax),%ymm3,%ymm3
1626 vmovdqa 128-128(%rsi),%ymm0
1627 vmovdqa 160-128(%rsi),%ymm1
1628 vpor %ymm2,%ymm3,%ymm5
1629 vmovdqa 192-128(%rsi),%ymm2
1630 vmovdqa 224-128(%rsi),%ymm3
1631 vpand 128+128(%rax),%ymm0,%ymm0
1632 vpand 160+128(%rax),%ymm1,%ymm1
1633 vpand 192+128(%rax),%ymm2,%ymm2
1634 vpor %ymm0,%ymm4,%ymm4
1635 vpand 224+128(%rax),%ymm3,%ymm3
1636 vpand 256-128(%rsi),%ymm8,%ymm0
1637 vpor %ymm1,%ymm5,%ymm5
1638 vpand 288-128(%rsi),%ymm9,%ymm1
1639 vpor %ymm2,%ymm4,%ymm4
1640 vpand 320-128(%rsi),%ymm10,%ymm2
1641 vpor %ymm3,%ymm5,%ymm5
1642 vpand 352-128(%rsi),%ymm11,%ymm3
1643 vpor %ymm0,%ymm4,%ymm4
1644 vpand 384-128(%rsi),%ymm12,%ymm0
1645 vpor %ymm1,%ymm5,%ymm5
1646 vpand 416-128(%rsi),%ymm13,%ymm1
1647 vpor %ymm2,%ymm4,%ymm4
1648 vpand 448-128(%rsi),%ymm14,%ymm2
1649 vpor %ymm3,%ymm5,%ymm5
1650 vpand 480-128(%rsi),%ymm15,%ymm3
1651 leaq 512(%rsi),%rsi
1652 vpor %ymm0,%ymm4,%ymm4
1653 vpor %ymm1,%ymm5,%ymm5
1654 vpor %ymm2,%ymm4,%ymm4
1655 vpor %ymm3,%ymm5,%ymm5
1656
1657 vpor %ymm5,%ymm4,%ymm4
1658 vextracti128 $1,%ymm4,%xmm5
1659 vpor %xmm4,%xmm5,%xmm5
1660 vpermd %ymm5,%ymm7,%ymm5
1661 vmovdqu %ymm5,(%rdi)
1662 leaq 32(%rdi),%rdi
1663 decl %edx
1664 jnz .Loop_gather_1024
1665
1666 vpxor %ymm0,%ymm0,%ymm0
1667 vmovdqu %ymm0,(%rdi)
1668 vzeroupper
1669 leaq (%r11),%rsp
1670 .byte 0xf3,0xc3
1671.size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
1672
1673.globl rsaz_avx2_eligible
1674.type rsaz_avx2_eligible,@function
1675.align 32
1676rsaz_avx2_eligible:
1677 movl OPENSSL_ia32cap_P+8(%rip),%eax
1678 movl $524544,%ecx
1679 movl $0,%edx
1680 andl %eax,%ecx
1681 cmpl $524544,%ecx
1682 cmovel %edx,%eax
1683 andl $32,%eax
1684 shrl $5,%eax
1685 .byte 0xf3,0xc3
1686.size rsaz_avx2_eligible,.-rsaz_avx2_eligible
1687
1688.align 64
1689.Land_mask:
1689.quad 0x1fffffff,0x1fffffff,0x1fffffff,-1
1690.quad 0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff
1690.Lscatter_permd:
1691.long 0,2,4,6,7,7,7,7
1692.Lgather_permd:
1693.long 0,7,1,7,2,7,3,7
1694.Linc:
1695.long 0,0,0,0, 1,1,1,1
1696.long 2,2,2,2, 3,3,3,3
1697.long 4,4,4,4, 4,4,4,4
1698.align 64
1691.Lscatter_permd:
1692.long 0,2,4,6,7,7,7,7
1693.Lgather_permd:
1694.long 0,7,1,7,2,7,3,7
1695.Linc:
1696.long 0,0,0,0, 1,1,1,1
1697.long 2,2,2,2, 3,3,3,3
1698.long 4,4,4,4, 4,4,4,4
1699.align 64