]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/rsaz-avx2.S
Use a template assembly file to generate the embedded MFS.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / amd64 / rsaz-avx2.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from rsaz-avx2.pl. */
3 .text   
4
5 .globl  rsaz_1024_sqr_avx2
6 .type   rsaz_1024_sqr_avx2,@function
7 .align  64
8 rsaz_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         vmovdqu .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 .type   rsaz_1024_mul_avx2,@function
660 .align  64
661 rsaz_1024_mul_avx2:
662 .cfi_startproc  
663         leaq    (%rsp),%rax
664 .cfi_def_cfa_register   %rax
665         pushq   %rbx
666 .cfi_offset     %rbx,-16
667         pushq   %rbp
668 .cfi_offset     %rbp,-24
669         pushq   %r12
670 .cfi_offset     %r12,-32
671         pushq   %r13
672 .cfi_offset     %r13,-40
673         pushq   %r14
674 .cfi_offset     %r14,-48
675         pushq   %r15
676 .cfi_offset     %r15,-56
677         movq    %rax,%rbp
678 .cfi_def_cfa_register   %rbp
679         vzeroall
680         movq    %rdx,%r13
681         subq    $64,%rsp
682
683
684
685
686
687
688 .byte   0x67,0x67
689         movq    %rsi,%r15
690         andq    $4095,%r15
691         addq    $320,%r15
692         shrq    $12,%r15
693         movq    %rsi,%r15
694         cmovnzq %r13,%rsi
695         cmovnzq %r15,%r13
696
697         movq    %rcx,%r15
698         subq    $-128,%rsi
699         subq    $-128,%rcx
700         subq    $-128,%rdi
701
702         andq    $4095,%r15
703         addq    $320,%r15
704 .byte   0x67,0x67
705         shrq    $12,%r15
706         jz      .Lmul_1024_no_n_copy
707
708
709
710
711
712         subq    $320,%rsp
713         vmovdqu 0-128(%rcx),%ymm0
714         andq    $-512,%rsp
715         vmovdqu 32-128(%rcx),%ymm1
716         vmovdqu 64-128(%rcx),%ymm2
717         vmovdqu 96-128(%rcx),%ymm3
718         vmovdqu 128-128(%rcx),%ymm4
719         vmovdqu 160-128(%rcx),%ymm5
720         vmovdqu 192-128(%rcx),%ymm6
721         vmovdqu 224-128(%rcx),%ymm7
722         vmovdqu 256-128(%rcx),%ymm8
723         leaq    64+128(%rsp),%rcx
724         vmovdqu %ymm0,0-128(%rcx)
725         vpxor   %ymm0,%ymm0,%ymm0
726         vmovdqu %ymm1,32-128(%rcx)
727         vpxor   %ymm1,%ymm1,%ymm1
728         vmovdqu %ymm2,64-128(%rcx)
729         vpxor   %ymm2,%ymm2,%ymm2
730         vmovdqu %ymm3,96-128(%rcx)
731         vpxor   %ymm3,%ymm3,%ymm3
732         vmovdqu %ymm4,128-128(%rcx)
733         vpxor   %ymm4,%ymm4,%ymm4
734         vmovdqu %ymm5,160-128(%rcx)
735         vpxor   %ymm5,%ymm5,%ymm5
736         vmovdqu %ymm6,192-128(%rcx)
737         vpxor   %ymm6,%ymm6,%ymm6
738         vmovdqu %ymm7,224-128(%rcx)
739         vpxor   %ymm7,%ymm7,%ymm7
740         vmovdqu %ymm8,256-128(%rcx)
741         vmovdqa %ymm0,%ymm8
742         vmovdqu %ymm9,288-128(%rcx)
743 .Lmul_1024_no_n_copy:
744         andq    $-64,%rsp
745
746         movq    (%r13),%rbx
747         vpbroadcastq    (%r13),%ymm10
748         vmovdqu %ymm0,(%rsp)
749         xorq    %r9,%r9
750 .byte   0x67
751         xorq    %r10,%r10
752         xorq    %r11,%r11
753         xorq    %r12,%r12
754
755         vmovdqu .Land_mask(%rip),%ymm15
756         movl    $9,%r14d
757         vmovdqu %ymm9,288-128(%rdi)
758         jmp     .Loop_mul_1024
759
760 .align  32
761 .Loop_mul_1024:
762         vpsrlq  $29,%ymm3,%ymm9
763         movq    %rbx,%rax
764         imulq   -128(%rsi),%rax
765         addq    %r9,%rax
766         movq    %rbx,%r10
767         imulq   8-128(%rsi),%r10
768         addq    8(%rsp),%r10
769
770         movq    %rax,%r9
771         imull   %r8d,%eax
772         andl    $0x1fffffff,%eax
773
774         movq    %rbx,%r11
775         imulq   16-128(%rsi),%r11
776         addq    16(%rsp),%r11
777
778         movq    %rbx,%r12
779         imulq   24-128(%rsi),%r12
780         addq    24(%rsp),%r12
781         vpmuludq        32-128(%rsi),%ymm10,%ymm0
782         vmovd   %eax,%xmm11
783         vpaddq  %ymm0,%ymm1,%ymm1
784         vpmuludq        64-128(%rsi),%ymm10,%ymm12
785         vpbroadcastq    %xmm11,%ymm11
786         vpaddq  %ymm12,%ymm2,%ymm2
787         vpmuludq        96-128(%rsi),%ymm10,%ymm13
788         vpand   %ymm15,%ymm3,%ymm3
789         vpaddq  %ymm13,%ymm3,%ymm3
790         vpmuludq        128-128(%rsi),%ymm10,%ymm0
791         vpaddq  %ymm0,%ymm4,%ymm4
792         vpmuludq        160-128(%rsi),%ymm10,%ymm12
793         vpaddq  %ymm12,%ymm5,%ymm5
794         vpmuludq        192-128(%rsi),%ymm10,%ymm13
795         vpaddq  %ymm13,%ymm6,%ymm6
796         vpmuludq        224-128(%rsi),%ymm10,%ymm0
797         vpermq  $0x93,%ymm9,%ymm9
798         vpaddq  %ymm0,%ymm7,%ymm7
799         vpmuludq        256-128(%rsi),%ymm10,%ymm12
800         vpbroadcastq    8(%r13),%ymm10
801         vpaddq  %ymm12,%ymm8,%ymm8
802
803         movq    %rax,%rdx
804         imulq   -128(%rcx),%rax
805         addq    %rax,%r9
806         movq    %rdx,%rax
807         imulq   8-128(%rcx),%rax
808         addq    %rax,%r10
809         movq    %rdx,%rax
810         imulq   16-128(%rcx),%rax
811         addq    %rax,%r11
812         shrq    $29,%r9
813         imulq   24-128(%rcx),%rdx
814         addq    %rdx,%r12
815         addq    %r9,%r10
816
817         vpmuludq        32-128(%rcx),%ymm11,%ymm13
818         vmovq   %xmm10,%rbx
819         vpaddq  %ymm13,%ymm1,%ymm1
820         vpmuludq        64-128(%rcx),%ymm11,%ymm0
821         vpaddq  %ymm0,%ymm2,%ymm2
822         vpmuludq        96-128(%rcx),%ymm11,%ymm12
823         vpaddq  %ymm12,%ymm3,%ymm3
824         vpmuludq        128-128(%rcx),%ymm11,%ymm13
825         vpaddq  %ymm13,%ymm4,%ymm4
826         vpmuludq        160-128(%rcx),%ymm11,%ymm0
827         vpaddq  %ymm0,%ymm5,%ymm5
828         vpmuludq        192-128(%rcx),%ymm11,%ymm12
829         vpaddq  %ymm12,%ymm6,%ymm6
830         vpmuludq        224-128(%rcx),%ymm11,%ymm13
831         vpblendd        $3,%ymm14,%ymm9,%ymm12
832         vpaddq  %ymm13,%ymm7,%ymm7
833         vpmuludq        256-128(%rcx),%ymm11,%ymm0
834         vpaddq  %ymm12,%ymm3,%ymm3
835         vpaddq  %ymm0,%ymm8,%ymm8
836
837         movq    %rbx,%rax
838         imulq   -128(%rsi),%rax
839         addq    %rax,%r10
840         vmovdqu -8+32-128(%rsi),%ymm12
841         movq    %rbx,%rax
842         imulq   8-128(%rsi),%rax
843         addq    %rax,%r11
844         vmovdqu -8+64-128(%rsi),%ymm13
845
846         movq    %r10,%rax
847         vpblendd        $0xfc,%ymm14,%ymm9,%ymm9
848         imull   %r8d,%eax
849         vpaddq  %ymm9,%ymm4,%ymm4
850         andl    $0x1fffffff,%eax
851
852         imulq   16-128(%rsi),%rbx
853         addq    %rbx,%r12
854         vpmuludq        %ymm10,%ymm12,%ymm12
855         vmovd   %eax,%xmm11
856         vmovdqu -8+96-128(%rsi),%ymm0
857         vpaddq  %ymm12,%ymm1,%ymm1
858         vpmuludq        %ymm10,%ymm13,%ymm13
859         vpbroadcastq    %xmm11,%ymm11
860         vmovdqu -8+128-128(%rsi),%ymm12
861         vpaddq  %ymm13,%ymm2,%ymm2
862         vpmuludq        %ymm10,%ymm0,%ymm0
863         vmovdqu -8+160-128(%rsi),%ymm13
864         vpaddq  %ymm0,%ymm3,%ymm3
865         vpmuludq        %ymm10,%ymm12,%ymm12
866         vmovdqu -8+192-128(%rsi),%ymm0
867         vpaddq  %ymm12,%ymm4,%ymm4
868         vpmuludq        %ymm10,%ymm13,%ymm13
869         vmovdqu -8+224-128(%rsi),%ymm12
870         vpaddq  %ymm13,%ymm5,%ymm5
871         vpmuludq        %ymm10,%ymm0,%ymm0
872         vmovdqu -8+256-128(%rsi),%ymm13
873         vpaddq  %ymm0,%ymm6,%ymm6
874         vpmuludq        %ymm10,%ymm12,%ymm12
875         vmovdqu -8+288-128(%rsi),%ymm9
876         vpaddq  %ymm12,%ymm7,%ymm7
877         vpmuludq        %ymm10,%ymm13,%ymm13
878         vpaddq  %ymm13,%ymm8,%ymm8
879         vpmuludq        %ymm10,%ymm9,%ymm9
880         vpbroadcastq    16(%r13),%ymm10
881
882         movq    %rax,%rdx
883         imulq   -128(%rcx),%rax
884         addq    %rax,%r10
885         vmovdqu -8+32-128(%rcx),%ymm0
886         movq    %rdx,%rax
887         imulq   8-128(%rcx),%rax
888         addq    %rax,%r11
889         vmovdqu -8+64-128(%rcx),%ymm12
890         shrq    $29,%r10
891         imulq   16-128(%rcx),%rdx
892         addq    %rdx,%r12
893         addq    %r10,%r11
894
895         vpmuludq        %ymm11,%ymm0,%ymm0
896         vmovq   %xmm10,%rbx
897         vmovdqu -8+96-128(%rcx),%ymm13
898         vpaddq  %ymm0,%ymm1,%ymm1
899         vpmuludq        %ymm11,%ymm12,%ymm12
900         vmovdqu -8+128-128(%rcx),%ymm0
901         vpaddq  %ymm12,%ymm2,%ymm2
902         vpmuludq        %ymm11,%ymm13,%ymm13
903         vmovdqu -8+160-128(%rcx),%ymm12
904         vpaddq  %ymm13,%ymm3,%ymm3
905         vpmuludq        %ymm11,%ymm0,%ymm0
906         vmovdqu -8+192-128(%rcx),%ymm13
907         vpaddq  %ymm0,%ymm4,%ymm4
908         vpmuludq        %ymm11,%ymm12,%ymm12
909         vmovdqu -8+224-128(%rcx),%ymm0
910         vpaddq  %ymm12,%ymm5,%ymm5
911         vpmuludq        %ymm11,%ymm13,%ymm13
912         vmovdqu -8+256-128(%rcx),%ymm12
913         vpaddq  %ymm13,%ymm6,%ymm6
914         vpmuludq        %ymm11,%ymm0,%ymm0
915         vmovdqu -8+288-128(%rcx),%ymm13
916         vpaddq  %ymm0,%ymm7,%ymm7
917         vpmuludq        %ymm11,%ymm12,%ymm12
918         vpaddq  %ymm12,%ymm8,%ymm8
919         vpmuludq        %ymm11,%ymm13,%ymm13
920         vpaddq  %ymm13,%ymm9,%ymm9
921
922         vmovdqu -16+32-128(%rsi),%ymm0
923         movq    %rbx,%rax
924         imulq   -128(%rsi),%rax
925         addq    %r11,%rax
926
927         vmovdqu -16+64-128(%rsi),%ymm12
928         movq    %rax,%r11
929         imull   %r8d,%eax
930         andl    $0x1fffffff,%eax
931
932         imulq   8-128(%rsi),%rbx
933         addq    %rbx,%r12
934         vpmuludq        %ymm10,%ymm0,%ymm0
935         vmovd   %eax,%xmm11
936         vmovdqu -16+96-128(%rsi),%ymm13
937         vpaddq  %ymm0,%ymm1,%ymm1
938         vpmuludq        %ymm10,%ymm12,%ymm12
939         vpbroadcastq    %xmm11,%ymm11
940         vmovdqu -16+128-128(%rsi),%ymm0
941         vpaddq  %ymm12,%ymm2,%ymm2
942         vpmuludq        %ymm10,%ymm13,%ymm13
943         vmovdqu -16+160-128(%rsi),%ymm12
944         vpaddq  %ymm13,%ymm3,%ymm3
945         vpmuludq        %ymm10,%ymm0,%ymm0
946         vmovdqu -16+192-128(%rsi),%ymm13
947         vpaddq  %ymm0,%ymm4,%ymm4
948         vpmuludq        %ymm10,%ymm12,%ymm12
949         vmovdqu -16+224-128(%rsi),%ymm0
950         vpaddq  %ymm12,%ymm5,%ymm5
951         vpmuludq        %ymm10,%ymm13,%ymm13
952         vmovdqu -16+256-128(%rsi),%ymm12
953         vpaddq  %ymm13,%ymm6,%ymm6
954         vpmuludq        %ymm10,%ymm0,%ymm0
955         vmovdqu -16+288-128(%rsi),%ymm13
956         vpaddq  %ymm0,%ymm7,%ymm7
957         vpmuludq        %ymm10,%ymm12,%ymm12
958         vpaddq  %ymm12,%ymm8,%ymm8
959         vpmuludq        %ymm10,%ymm13,%ymm13
960         vpbroadcastq    24(%r13),%ymm10
961         vpaddq  %ymm13,%ymm9,%ymm9
962
963         vmovdqu -16+32-128(%rcx),%ymm0
964         movq    %rax,%rdx
965         imulq   -128(%rcx),%rax
966         addq    %rax,%r11
967         vmovdqu -16+64-128(%rcx),%ymm12
968         imulq   8-128(%rcx),%rdx
969         addq    %rdx,%r12
970         shrq    $29,%r11
971
972         vpmuludq        %ymm11,%ymm0,%ymm0
973         vmovq   %xmm10,%rbx
974         vmovdqu -16+96-128(%rcx),%ymm13
975         vpaddq  %ymm0,%ymm1,%ymm1
976         vpmuludq        %ymm11,%ymm12,%ymm12
977         vmovdqu -16+128-128(%rcx),%ymm0
978         vpaddq  %ymm12,%ymm2,%ymm2
979         vpmuludq        %ymm11,%ymm13,%ymm13
980         vmovdqu -16+160-128(%rcx),%ymm12
981         vpaddq  %ymm13,%ymm3,%ymm3
982         vpmuludq        %ymm11,%ymm0,%ymm0
983         vmovdqu -16+192-128(%rcx),%ymm13
984         vpaddq  %ymm0,%ymm4,%ymm4
985         vpmuludq        %ymm11,%ymm12,%ymm12
986         vmovdqu -16+224-128(%rcx),%ymm0
987         vpaddq  %ymm12,%ymm5,%ymm5
988         vpmuludq        %ymm11,%ymm13,%ymm13
989         vmovdqu -16+256-128(%rcx),%ymm12
990         vpaddq  %ymm13,%ymm6,%ymm6
991         vpmuludq        %ymm11,%ymm0,%ymm0
992         vmovdqu -16+288-128(%rcx),%ymm13
993         vpaddq  %ymm0,%ymm7,%ymm7
994         vpmuludq        %ymm11,%ymm12,%ymm12
995         vmovdqu -24+32-128(%rsi),%ymm0
996         vpaddq  %ymm12,%ymm8,%ymm8
997         vpmuludq        %ymm11,%ymm13,%ymm13
998         vmovdqu -24+64-128(%rsi),%ymm12
999         vpaddq  %ymm13,%ymm9,%ymm9
1000
1001         addq    %r11,%r12
1002         imulq   -128(%rsi),%rbx
1003         addq    %rbx,%r12
1004
1005         movq    %r12,%rax
1006         imull   %r8d,%eax
1007         andl    $0x1fffffff,%eax
1008
1009         vpmuludq        %ymm10,%ymm0,%ymm0
1010         vmovd   %eax,%xmm11
1011         vmovdqu -24+96-128(%rsi),%ymm13
1012         vpaddq  %ymm0,%ymm1,%ymm1
1013         vpmuludq        %ymm10,%ymm12,%ymm12
1014         vpbroadcastq    %xmm11,%ymm11
1015         vmovdqu -24+128-128(%rsi),%ymm0
1016         vpaddq  %ymm12,%ymm2,%ymm2
1017         vpmuludq        %ymm10,%ymm13,%ymm13
1018         vmovdqu -24+160-128(%rsi),%ymm12
1019         vpaddq  %ymm13,%ymm3,%ymm3
1020         vpmuludq        %ymm10,%ymm0,%ymm0
1021         vmovdqu -24+192-128(%rsi),%ymm13
1022         vpaddq  %ymm0,%ymm4,%ymm4
1023         vpmuludq        %ymm10,%ymm12,%ymm12
1024         vmovdqu -24+224-128(%rsi),%ymm0
1025         vpaddq  %ymm12,%ymm5,%ymm5
1026         vpmuludq        %ymm10,%ymm13,%ymm13
1027         vmovdqu -24+256-128(%rsi),%ymm12
1028         vpaddq  %ymm13,%ymm6,%ymm6
1029         vpmuludq        %ymm10,%ymm0,%ymm0
1030         vmovdqu -24+288-128(%rsi),%ymm13
1031         vpaddq  %ymm0,%ymm7,%ymm7
1032         vpmuludq        %ymm10,%ymm12,%ymm12
1033         vpaddq  %ymm12,%ymm8,%ymm8
1034         vpmuludq        %ymm10,%ymm13,%ymm13
1035         vpbroadcastq    32(%r13),%ymm10
1036         vpaddq  %ymm13,%ymm9,%ymm9
1037         addq    $32,%r13
1038
1039         vmovdqu -24+32-128(%rcx),%ymm0
1040         imulq   -128(%rcx),%rax
1041         addq    %rax,%r12
1042         shrq    $29,%r12
1043
1044         vmovdqu -24+64-128(%rcx),%ymm12
1045         vpmuludq        %ymm11,%ymm0,%ymm0
1046         vmovq   %xmm10,%rbx
1047         vmovdqu -24+96-128(%rcx),%ymm13
1048         vpaddq  %ymm0,%ymm1,%ymm0
1049         vpmuludq        %ymm11,%ymm12,%ymm12
1050         vmovdqu %ymm0,(%rsp)
1051         vpaddq  %ymm12,%ymm2,%ymm1
1052         vmovdqu -24+128-128(%rcx),%ymm0
1053         vpmuludq        %ymm11,%ymm13,%ymm13
1054         vmovdqu -24+160-128(%rcx),%ymm12
1055         vpaddq  %ymm13,%ymm3,%ymm2
1056         vpmuludq        %ymm11,%ymm0,%ymm0
1057         vmovdqu -24+192-128(%rcx),%ymm13
1058         vpaddq  %ymm0,%ymm4,%ymm3
1059         vpmuludq        %ymm11,%ymm12,%ymm12
1060         vmovdqu -24+224-128(%rcx),%ymm0
1061         vpaddq  %ymm12,%ymm5,%ymm4
1062         vpmuludq        %ymm11,%ymm13,%ymm13
1063         vmovdqu -24+256-128(%rcx),%ymm12
1064         vpaddq  %ymm13,%ymm6,%ymm5
1065         vpmuludq        %ymm11,%ymm0,%ymm0
1066         vmovdqu -24+288-128(%rcx),%ymm13
1067         movq    %r12,%r9
1068         vpaddq  %ymm0,%ymm7,%ymm6
1069         vpmuludq        %ymm11,%ymm12,%ymm12
1070         addq    (%rsp),%r9
1071         vpaddq  %ymm12,%ymm8,%ymm7
1072         vpmuludq        %ymm11,%ymm13,%ymm13
1073         vmovq   %r12,%xmm12
1074         vpaddq  %ymm13,%ymm9,%ymm8
1075
1076         decl    %r14d
1077         jnz     .Loop_mul_1024
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 .type   rsaz_1024_red2norm_avx2,@function
1215 .align  32
1216 rsaz_1024_red2norm_avx2:
1217 .cfi_startproc  
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 .cfi_endproc    
1410 .size   rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
1411
1412 .globl  rsaz_1024_norm2red_avx2
1413 .type   rsaz_1024_norm2red_avx2,@function
1414 .align  32
1415 rsaz_1024_norm2red_avx2:
1416 .cfi_startproc  
1417         subq    $-128,%rdi
1418         movq    (%rsi),%r8
1419         movl    $0x1fffffff,%eax
1420         movq    8(%rsi),%r9
1421         movq    %r8,%r11
1422         shrq    $0,%r11
1423         andq    %rax,%r11
1424         movq    %r11,-128(%rdi)
1425         movq    %r8,%r10
1426         shrq    $29,%r10
1427         andq    %rax,%r10
1428         movq    %r10,-120(%rdi)
1429         shrdq   $58,%r9,%r8
1430         andq    %rax,%r8
1431         movq    %r8,-112(%rdi)
1432         movq    16(%rsi),%r10
1433         movq    %r9,%r8
1434         shrq    $23,%r8
1435         andq    %rax,%r8
1436         movq    %r8,-104(%rdi)
1437         shrdq   $52,%r10,%r9
1438         andq    %rax,%r9
1439         movq    %r9,-96(%rdi)
1440         movq    24(%rsi),%r11
1441         movq    %r10,%r9
1442         shrq    $17,%r9
1443         andq    %rax,%r9
1444         movq    %r9,-88(%rdi)
1445         shrdq   $46,%r11,%r10
1446         andq    %rax,%r10
1447         movq    %r10,-80(%rdi)
1448         movq    32(%rsi),%r8
1449         movq    %r11,%r10
1450         shrq    $11,%r10
1451         andq    %rax,%r10
1452         movq    %r10,-72(%rdi)
1453         shrdq   $40,%r8,%r11
1454         andq    %rax,%r11
1455         movq    %r11,-64(%rdi)
1456         movq    40(%rsi),%r9
1457         movq    %r8,%r11
1458         shrq    $5,%r11
1459         andq    %rax,%r11
1460         movq    %r11,-56(%rdi)
1461         movq    %r8,%r10
1462         shrq    $34,%r10
1463         andq    %rax,%r10
1464         movq    %r10,-48(%rdi)
1465         shrdq   $63,%r9,%r8
1466         andq    %rax,%r8
1467         movq    %r8,-40(%rdi)
1468         movq    48(%rsi),%r10
1469         movq    %r9,%r8
1470         shrq    $28,%r8
1471         andq    %rax,%r8
1472         movq    %r8,-32(%rdi)
1473         shrdq   $57,%r10,%r9
1474         andq    %rax,%r9
1475         movq    %r9,-24(%rdi)
1476         movq    56(%rsi),%r11
1477         movq    %r10,%r9
1478         shrq    $22,%r9
1479         andq    %rax,%r9
1480         movq    %r9,-16(%rdi)
1481         shrdq   $51,%r11,%r10
1482         andq    %rax,%r10
1483         movq    %r10,-8(%rdi)
1484         movq    64(%rsi),%r8
1485         movq    %r11,%r10
1486         shrq    $16,%r10
1487         andq    %rax,%r10
1488         movq    %r10,0(%rdi)
1489         shrdq   $45,%r8,%r11
1490         andq    %rax,%r11
1491         movq    %r11,8(%rdi)
1492         movq    72(%rsi),%r9
1493         movq    %r8,%r11
1494         shrq    $10,%r11
1495         andq    %rax,%r11
1496         movq    %r11,16(%rdi)
1497         shrdq   $39,%r9,%r8
1498         andq    %rax,%r8
1499         movq    %r8,24(%rdi)
1500         movq    80(%rsi),%r10
1501         movq    %r9,%r8
1502         shrq    $4,%r8
1503         andq    %rax,%r8
1504         movq    %r8,32(%rdi)
1505         movq    %r9,%r11
1506         shrq    $33,%r11
1507         andq    %rax,%r11
1508         movq    %r11,40(%rdi)
1509         shrdq   $62,%r10,%r9
1510         andq    %rax,%r9
1511         movq    %r9,48(%rdi)
1512         movq    88(%rsi),%r11
1513         movq    %r10,%r9
1514         shrq    $27,%r9
1515         andq    %rax,%r9
1516         movq    %r9,56(%rdi)
1517         shrdq   $56,%r11,%r10
1518         andq    %rax,%r10
1519         movq    %r10,64(%rdi)
1520         movq    96(%rsi),%r8
1521         movq    %r11,%r10
1522         shrq    $21,%r10
1523         andq    %rax,%r10
1524         movq    %r10,72(%rdi)
1525         shrdq   $50,%r8,%r11
1526         andq    %rax,%r11
1527         movq    %r11,80(%rdi)
1528         movq    104(%rsi),%r9
1529         movq    %r8,%r11
1530         shrq    $15,%r11
1531         andq    %rax,%r11
1532         movq    %r11,88(%rdi)
1533         shrdq   $44,%r9,%r8
1534         andq    %rax,%r8
1535         movq    %r8,96(%rdi)
1536         movq    112(%rsi),%r10
1537         movq    %r9,%r8
1538         shrq    $9,%r8
1539         andq    %rax,%r8
1540         movq    %r8,104(%rdi)
1541         shrdq   $38,%r10,%r9
1542         andq    %rax,%r9
1543         movq    %r9,112(%rdi)
1544         movq    120(%rsi),%r11
1545         movq    %r10,%r9
1546         shrq    $3,%r9
1547         andq    %rax,%r9
1548         movq    %r9,120(%rdi)
1549         movq    %r10,%r8
1550         shrq    $32,%r8
1551         andq    %rax,%r8
1552         movq    %r8,128(%rdi)
1553         shrdq   $61,%r11,%r10
1554         andq    %rax,%r10
1555         movq    %r10,136(%rdi)
1556         xorq    %r8,%r8
1557         movq    %r11,%r10
1558         shrq    $26,%r10
1559         andq    %rax,%r10
1560         movq    %r10,144(%rdi)
1561         shrdq   $55,%r8,%r11
1562         andq    %rax,%r11
1563         movq    %r11,152(%rdi)
1564         movq    %r8,160(%rdi)
1565         movq    %r8,168(%rdi)
1566         movq    %r8,176(%rdi)
1567         movq    %r8,184(%rdi)
1568         .byte   0xf3,0xc3
1569 .cfi_endproc    
1570 .size   rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
1571 .globl  rsaz_1024_scatter5_avx2
1572 .type   rsaz_1024_scatter5_avx2,@function
1573 .align  32
1574 rsaz_1024_scatter5_avx2:
1575 .cfi_startproc  
1576         vzeroupper
1577         vmovdqu .Lscatter_permd(%rip),%ymm5
1578         shll    $4,%edx
1579         leaq    (%rdi,%rdx,1),%rdi
1580         movl    $9,%eax
1581         jmp     .Loop_scatter_1024
1582
1583 .align  32
1584 .Loop_scatter_1024:
1585         vmovdqu (%rsi),%ymm0
1586         leaq    32(%rsi),%rsi
1587         vpermd  %ymm0,%ymm5,%ymm0
1588         vmovdqu %xmm0,(%rdi)
1589         leaq    512(%rdi),%rdi
1590         decl    %eax
1591         jnz     .Loop_scatter_1024
1592
1593         vzeroupper
1594         .byte   0xf3,0xc3
1595 .cfi_endproc    
1596 .size   rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
1597
1598 .globl  rsaz_1024_gather5_avx2
1599 .type   rsaz_1024_gather5_avx2,@function
1600 .align  32
1601 rsaz_1024_gather5_avx2:
1602 .cfi_startproc  
1603         vzeroupper
1604         movq    %rsp,%r11
1605 .cfi_def_cfa_register   %r11
1606         leaq    -256(%rsp),%rsp
1607         andq    $-32,%rsp
1608         leaq    .Linc(%rip),%r10
1609         leaq    -128(%rsp),%rax
1610
1611         vmovd   %edx,%xmm4
1612         vmovdqa (%r10),%ymm0
1613         vmovdqa 32(%r10),%ymm1
1614         vmovdqa 64(%r10),%ymm5
1615         vpbroadcastd    %xmm4,%ymm4
1616
1617         vpaddd  %ymm5,%ymm0,%ymm2
1618         vpcmpeqd        %ymm4,%ymm0,%ymm0
1619         vpaddd  %ymm5,%ymm1,%ymm3
1620         vpcmpeqd        %ymm4,%ymm1,%ymm1
1621         vmovdqa %ymm0,0+128(%rax)
1622         vpaddd  %ymm5,%ymm2,%ymm0
1623         vpcmpeqd        %ymm4,%ymm2,%ymm2
1624         vmovdqa %ymm1,32+128(%rax)
1625         vpaddd  %ymm5,%ymm3,%ymm1
1626         vpcmpeqd        %ymm4,%ymm3,%ymm3
1627         vmovdqa %ymm2,64+128(%rax)
1628         vpaddd  %ymm5,%ymm0,%ymm2
1629         vpcmpeqd        %ymm4,%ymm0,%ymm0
1630         vmovdqa %ymm3,96+128(%rax)
1631         vpaddd  %ymm5,%ymm1,%ymm3
1632         vpcmpeqd        %ymm4,%ymm1,%ymm1
1633         vmovdqa %ymm0,128+128(%rax)
1634         vpaddd  %ymm5,%ymm2,%ymm8
1635         vpcmpeqd        %ymm4,%ymm2,%ymm2
1636         vmovdqa %ymm1,160+128(%rax)
1637         vpaddd  %ymm5,%ymm3,%ymm9
1638         vpcmpeqd        %ymm4,%ymm3,%ymm3
1639         vmovdqa %ymm2,192+128(%rax)
1640         vpaddd  %ymm5,%ymm8,%ymm10
1641         vpcmpeqd        %ymm4,%ymm8,%ymm8
1642         vmovdqa %ymm3,224+128(%rax)
1643         vpaddd  %ymm5,%ymm9,%ymm11
1644         vpcmpeqd        %ymm4,%ymm9,%ymm9
1645         vpaddd  %ymm5,%ymm10,%ymm12
1646         vpcmpeqd        %ymm4,%ymm10,%ymm10
1647         vpaddd  %ymm5,%ymm11,%ymm13
1648         vpcmpeqd        %ymm4,%ymm11,%ymm11
1649         vpaddd  %ymm5,%ymm12,%ymm14
1650         vpcmpeqd        %ymm4,%ymm12,%ymm12
1651         vpaddd  %ymm5,%ymm13,%ymm15
1652         vpcmpeqd        %ymm4,%ymm13,%ymm13
1653         vpcmpeqd        %ymm4,%ymm14,%ymm14
1654         vpcmpeqd        %ymm4,%ymm15,%ymm15
1655
1656         vmovdqa -32(%r10),%ymm7
1657         leaq    128(%rsi),%rsi
1658         movl    $9,%edx
1659
1660 .Loop_gather_1024:
1661         vmovdqa 0-128(%rsi),%ymm0
1662         vmovdqa 32-128(%rsi),%ymm1
1663         vmovdqa 64-128(%rsi),%ymm2
1664         vmovdqa 96-128(%rsi),%ymm3
1665         vpand   0+128(%rax),%ymm0,%ymm0
1666         vpand   32+128(%rax),%ymm1,%ymm1
1667         vpand   64+128(%rax),%ymm2,%ymm2
1668         vpor    %ymm0,%ymm1,%ymm4
1669         vpand   96+128(%rax),%ymm3,%ymm3
1670         vmovdqa 128-128(%rsi),%ymm0
1671         vmovdqa 160-128(%rsi),%ymm1
1672         vpor    %ymm2,%ymm3,%ymm5
1673         vmovdqa 192-128(%rsi),%ymm2
1674         vmovdqa 224-128(%rsi),%ymm3
1675         vpand   128+128(%rax),%ymm0,%ymm0
1676         vpand   160+128(%rax),%ymm1,%ymm1
1677         vpand   192+128(%rax),%ymm2,%ymm2
1678         vpor    %ymm0,%ymm4,%ymm4
1679         vpand   224+128(%rax),%ymm3,%ymm3
1680         vpand   256-128(%rsi),%ymm8,%ymm0
1681         vpor    %ymm1,%ymm5,%ymm5
1682         vpand   288-128(%rsi),%ymm9,%ymm1
1683         vpor    %ymm2,%ymm4,%ymm4
1684         vpand   320-128(%rsi),%ymm10,%ymm2
1685         vpor    %ymm3,%ymm5,%ymm5
1686         vpand   352-128(%rsi),%ymm11,%ymm3
1687         vpor    %ymm0,%ymm4,%ymm4
1688         vpand   384-128(%rsi),%ymm12,%ymm0
1689         vpor    %ymm1,%ymm5,%ymm5
1690         vpand   416-128(%rsi),%ymm13,%ymm1
1691         vpor    %ymm2,%ymm4,%ymm4
1692         vpand   448-128(%rsi),%ymm14,%ymm2
1693         vpor    %ymm3,%ymm5,%ymm5
1694         vpand   480-128(%rsi),%ymm15,%ymm3
1695         leaq    512(%rsi),%rsi
1696         vpor    %ymm0,%ymm4,%ymm4
1697         vpor    %ymm1,%ymm5,%ymm5
1698         vpor    %ymm2,%ymm4,%ymm4
1699         vpor    %ymm3,%ymm5,%ymm5
1700
1701         vpor    %ymm5,%ymm4,%ymm4
1702         vextracti128    $1,%ymm4,%xmm5
1703         vpor    %xmm4,%xmm5,%xmm5
1704         vpermd  %ymm5,%ymm7,%ymm5
1705         vmovdqu %ymm5,(%rdi)
1706         leaq    32(%rdi),%rdi
1707         decl    %edx
1708         jnz     .Loop_gather_1024
1709
1710         vpxor   %ymm0,%ymm0,%ymm0
1711         vmovdqu %ymm0,(%rdi)
1712         vzeroupper
1713         leaq    (%r11),%rsp
1714 .cfi_def_cfa_register   %rsp
1715         .byte   0xf3,0xc3
1716 .cfi_endproc    
1717 .LSEH_end_rsaz_1024_gather5:
1718 .size   rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
1719
1720 .globl  rsaz_avx2_eligible
1721 .type   rsaz_avx2_eligible,@function
1722 .align  32
1723 rsaz_avx2_eligible:
1724         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
1732         .byte   0xf3,0xc3
1733 .size   rsaz_avx2_eligible,.-rsaz_avx2_eligible
1734
1735 .align  64
1736 .Land_mask:
1737 .quad   0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff
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