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