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