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