]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/rsaz-avx2.S
Regen amd64 assembly files for OpenSSL 1.1.1.
[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         subq    $-128,%rsi
1218         xorq    %rax,%rax
1219         movq    -128(%rsi),%r8
1220         movq    -120(%rsi),%r9
1221         movq    -112(%rsi),%r10
1222         shlq    $0,%r8
1223         shlq    $29,%r9
1224         movq    %r10,%r11
1225         shlq    $58,%r10
1226         shrq    $6,%r11
1227         addq    %r8,%rax
1228         addq    %r9,%rax
1229         addq    %r10,%rax
1230         adcq    $0,%r11
1231         movq    %rax,0(%rdi)
1232         movq    %r11,%rax
1233         movq    -104(%rsi),%r8
1234         movq    -96(%rsi),%r9
1235         shlq    $23,%r8
1236         movq    %r9,%r10
1237         shlq    $52,%r9
1238         shrq    $12,%r10
1239         addq    %r8,%rax
1240         addq    %r9,%rax
1241         adcq    $0,%r10
1242         movq    %rax,8(%rdi)
1243         movq    %r10,%rax
1244         movq    -88(%rsi),%r11
1245         movq    -80(%rsi),%r8
1246         shlq    $17,%r11
1247         movq    %r8,%r9
1248         shlq    $46,%r8
1249         shrq    $18,%r9
1250         addq    %r11,%rax
1251         addq    %r8,%rax
1252         adcq    $0,%r9
1253         movq    %rax,16(%rdi)
1254         movq    %r9,%rax
1255         movq    -72(%rsi),%r10
1256         movq    -64(%rsi),%r11
1257         shlq    $11,%r10
1258         movq    %r11,%r8
1259         shlq    $40,%r11
1260         shrq    $24,%r8
1261         addq    %r10,%rax
1262         addq    %r11,%rax
1263         adcq    $0,%r8
1264         movq    %rax,24(%rdi)
1265         movq    %r8,%rax
1266         movq    -56(%rsi),%r9
1267         movq    -48(%rsi),%r10
1268         movq    -40(%rsi),%r11
1269         shlq    $5,%r9
1270         shlq    $34,%r10
1271         movq    %r11,%r8
1272         shlq    $63,%r11
1273         shrq    $1,%r8
1274         addq    %r9,%rax
1275         addq    %r10,%rax
1276         addq    %r11,%rax
1277         adcq    $0,%r8
1278         movq    %rax,32(%rdi)
1279         movq    %r8,%rax
1280         movq    -32(%rsi),%r9
1281         movq    -24(%rsi),%r10
1282         shlq    $28,%r9
1283         movq    %r10,%r11
1284         shlq    $57,%r10
1285         shrq    $7,%r11
1286         addq    %r9,%rax
1287         addq    %r10,%rax
1288         adcq    $0,%r11
1289         movq    %rax,40(%rdi)
1290         movq    %r11,%rax
1291         movq    -16(%rsi),%r8
1292         movq    -8(%rsi),%r9
1293         shlq    $22,%r8
1294         movq    %r9,%r10
1295         shlq    $51,%r9
1296         shrq    $13,%r10
1297         addq    %r8,%rax
1298         addq    %r9,%rax
1299         adcq    $0,%r10
1300         movq    %rax,48(%rdi)
1301         movq    %r10,%rax
1302         movq    0(%rsi),%r11
1303         movq    8(%rsi),%r8
1304         shlq    $16,%r11
1305         movq    %r8,%r9
1306         shlq    $45,%r8
1307         shrq    $19,%r9
1308         addq    %r11,%rax
1309         addq    %r8,%rax
1310         adcq    $0,%r9
1311         movq    %rax,56(%rdi)
1312         movq    %r9,%rax
1313         movq    16(%rsi),%r10
1314         movq    24(%rsi),%r11
1315         shlq    $10,%r10
1316         movq    %r11,%r8
1317         shlq    $39,%r11
1318         shrq    $25,%r8
1319         addq    %r10,%rax
1320         addq    %r11,%rax
1321         adcq    $0,%r8
1322         movq    %rax,64(%rdi)
1323         movq    %r8,%rax
1324         movq    32(%rsi),%r9
1325         movq    40(%rsi),%r10
1326         movq    48(%rsi),%r11
1327         shlq    $4,%r9
1328         shlq    $33,%r10
1329         movq    %r11,%r8
1330         shlq    $62,%r11
1331         shrq    $2,%r8
1332         addq    %r9,%rax
1333         addq    %r10,%rax
1334         addq    %r11,%rax
1335         adcq    $0,%r8
1336         movq    %rax,72(%rdi)
1337         movq    %r8,%rax
1338         movq    56(%rsi),%r9
1339         movq    64(%rsi),%r10
1340         shlq    $27,%r9
1341         movq    %r10,%r11
1342         shlq    $56,%r10
1343         shrq    $8,%r11
1344         addq    %r9,%rax
1345         addq    %r10,%rax
1346         adcq    $0,%r11
1347         movq    %rax,80(%rdi)
1348         movq    %r11,%rax
1349         movq    72(%rsi),%r8
1350         movq    80(%rsi),%r9
1351         shlq    $21,%r8
1352         movq    %r9,%r10
1353         shlq    $50,%r9
1354         shrq    $14,%r10
1355         addq    %r8,%rax
1356         addq    %r9,%rax
1357         adcq    $0,%r10
1358         movq    %rax,88(%rdi)
1359         movq    %r10,%rax
1360         movq    88(%rsi),%r11
1361         movq    96(%rsi),%r8
1362         shlq    $15,%r11
1363         movq    %r8,%r9
1364         shlq    $44,%r8
1365         shrq    $20,%r9
1366         addq    %r11,%rax
1367         addq    %r8,%rax
1368         adcq    $0,%r9
1369         movq    %rax,96(%rdi)
1370         movq    %r9,%rax
1371         movq    104(%rsi),%r10
1372         movq    112(%rsi),%r11
1373         shlq    $9,%r10
1374         movq    %r11,%r8
1375         shlq    $38,%r11
1376         shrq    $26,%r8
1377         addq    %r10,%rax
1378         addq    %r11,%rax
1379         adcq    $0,%r8
1380         movq    %rax,104(%rdi)
1381         movq    %r8,%rax
1382         movq    120(%rsi),%r9
1383         movq    128(%rsi),%r10
1384         movq    136(%rsi),%r11
1385         shlq    $3,%r9
1386         shlq    $32,%r10
1387         movq    %r11,%r8
1388         shlq    $61,%r11
1389         shrq    $3,%r8
1390         addq    %r9,%rax
1391         addq    %r10,%rax
1392         addq    %r11,%rax
1393         adcq    $0,%r8
1394         movq    %rax,112(%rdi)
1395         movq    %r8,%rax
1396         movq    144(%rsi),%r9
1397         movq    152(%rsi),%r10
1398         shlq    $26,%r9
1399         movq    %r10,%r11
1400         shlq    $55,%r10
1401         shrq    $9,%r11
1402         addq    %r9,%rax
1403         addq    %r10,%rax
1404         adcq    $0,%r11
1405         movq    %rax,120(%rdi)
1406         movq    %r11,%rax
1407         .byte   0xf3,0xc3
1408 .size   rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
1409
1410 .globl  rsaz_1024_norm2red_avx2
1411 .type   rsaz_1024_norm2red_avx2,@function
1412 .align  32
1413 rsaz_1024_norm2red_avx2:
1414         subq    $-128,%rdi
1415         movq    (%rsi),%r8
1416         movl    $0x1fffffff,%eax
1417         movq    8(%rsi),%r9
1418         movq    %r8,%r11
1419         shrq    $0,%r11
1420         andq    %rax,%r11
1421         movq    %r11,-128(%rdi)
1422         movq    %r8,%r10
1423         shrq    $29,%r10
1424         andq    %rax,%r10
1425         movq    %r10,-120(%rdi)
1426         shrdq   $58,%r9,%r8
1427         andq    %rax,%r8
1428         movq    %r8,-112(%rdi)
1429         movq    16(%rsi),%r10
1430         movq    %r9,%r8
1431         shrq    $23,%r8
1432         andq    %rax,%r8
1433         movq    %r8,-104(%rdi)
1434         shrdq   $52,%r10,%r9
1435         andq    %rax,%r9
1436         movq    %r9,-96(%rdi)
1437         movq    24(%rsi),%r11
1438         movq    %r10,%r9
1439         shrq    $17,%r9
1440         andq    %rax,%r9
1441         movq    %r9,-88(%rdi)
1442         shrdq   $46,%r11,%r10
1443         andq    %rax,%r10
1444         movq    %r10,-80(%rdi)
1445         movq    32(%rsi),%r8
1446         movq    %r11,%r10
1447         shrq    $11,%r10
1448         andq    %rax,%r10
1449         movq    %r10,-72(%rdi)
1450         shrdq   $40,%r8,%r11
1451         andq    %rax,%r11
1452         movq    %r11,-64(%rdi)
1453         movq    40(%rsi),%r9
1454         movq    %r8,%r11
1455         shrq    $5,%r11
1456         andq    %rax,%r11
1457         movq    %r11,-56(%rdi)
1458         movq    %r8,%r10
1459         shrq    $34,%r10
1460         andq    %rax,%r10
1461         movq    %r10,-48(%rdi)
1462         shrdq   $63,%r9,%r8
1463         andq    %rax,%r8
1464         movq    %r8,-40(%rdi)
1465         movq    48(%rsi),%r10
1466         movq    %r9,%r8
1467         shrq    $28,%r8
1468         andq    %rax,%r8
1469         movq    %r8,-32(%rdi)
1470         shrdq   $57,%r10,%r9
1471         andq    %rax,%r9
1472         movq    %r9,-24(%rdi)
1473         movq    56(%rsi),%r11
1474         movq    %r10,%r9
1475         shrq    $22,%r9
1476         andq    %rax,%r9
1477         movq    %r9,-16(%rdi)
1478         shrdq   $51,%r11,%r10
1479         andq    %rax,%r10
1480         movq    %r10,-8(%rdi)
1481         movq    64(%rsi),%r8
1482         movq    %r11,%r10
1483         shrq    $16,%r10
1484         andq    %rax,%r10
1485         movq    %r10,0(%rdi)
1486         shrdq   $45,%r8,%r11
1487         andq    %rax,%r11
1488         movq    %r11,8(%rdi)
1489         movq    72(%rsi),%r9
1490         movq    %r8,%r11
1491         shrq    $10,%r11
1492         andq    %rax,%r11
1493         movq    %r11,16(%rdi)
1494         shrdq   $39,%r9,%r8
1495         andq    %rax,%r8
1496         movq    %r8,24(%rdi)
1497         movq    80(%rsi),%r10
1498         movq    %r9,%r8
1499         shrq    $4,%r8
1500         andq    %rax,%r8
1501         movq    %r8,32(%rdi)
1502         movq    %r9,%r11
1503         shrq    $33,%r11
1504         andq    %rax,%r11
1505         movq    %r11,40(%rdi)
1506         shrdq   $62,%r10,%r9
1507         andq    %rax,%r9
1508         movq    %r9,48(%rdi)
1509         movq    88(%rsi),%r11
1510         movq    %r10,%r9
1511         shrq    $27,%r9
1512         andq    %rax,%r9
1513         movq    %r9,56(%rdi)
1514         shrdq   $56,%r11,%r10
1515         andq    %rax,%r10
1516         movq    %r10,64(%rdi)
1517         movq    96(%rsi),%r8
1518         movq    %r11,%r10
1519         shrq    $21,%r10
1520         andq    %rax,%r10
1521         movq    %r10,72(%rdi)
1522         shrdq   $50,%r8,%r11
1523         andq    %rax,%r11
1524         movq    %r11,80(%rdi)
1525         movq    104(%rsi),%r9
1526         movq    %r8,%r11
1527         shrq    $15,%r11
1528         andq    %rax,%r11
1529         movq    %r11,88(%rdi)
1530         shrdq   $44,%r9,%r8
1531         andq    %rax,%r8
1532         movq    %r8,96(%rdi)
1533         movq    112(%rsi),%r10
1534         movq    %r9,%r8
1535         shrq    $9,%r8
1536         andq    %rax,%r8
1537         movq    %r8,104(%rdi)
1538         shrdq   $38,%r10,%r9
1539         andq    %rax,%r9
1540         movq    %r9,112(%rdi)
1541         movq    120(%rsi),%r11
1542         movq    %r10,%r9
1543         shrq    $3,%r9
1544         andq    %rax,%r9
1545         movq    %r9,120(%rdi)
1546         movq    %r10,%r8
1547         shrq    $32,%r8
1548         andq    %rax,%r8
1549         movq    %r8,128(%rdi)
1550         shrdq   $61,%r11,%r10
1551         andq    %rax,%r10
1552         movq    %r10,136(%rdi)
1553         xorq    %r8,%r8
1554         movq    %r11,%r10
1555         shrq    $26,%r10
1556         andq    %rax,%r10
1557         movq    %r10,144(%rdi)
1558         shrdq   $55,%r8,%r11
1559         andq    %rax,%r11
1560         movq    %r11,152(%rdi)
1561         movq    %r8,160(%rdi)
1562         movq    %r8,168(%rdi)
1563         movq    %r8,176(%rdi)
1564         movq    %r8,184(%rdi)
1565         .byte   0xf3,0xc3
1566 .size   rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
1567 .globl  rsaz_1024_scatter5_avx2
1568 .type   rsaz_1024_scatter5_avx2,@function
1569 .align  32
1570 rsaz_1024_scatter5_avx2:
1571         vzeroupper
1572         vmovdqu .Lscatter_permd(%rip),%ymm5
1573         shll    $4,%edx
1574         leaq    (%rdi,%rdx,1),%rdi
1575         movl    $9,%eax
1576         jmp     .Loop_scatter_1024
1577
1578 .align  32
1579 .Loop_scatter_1024:
1580         vmovdqu (%rsi),%ymm0
1581         leaq    32(%rsi),%rsi
1582         vpermd  %ymm0,%ymm5,%ymm0
1583         vmovdqu %xmm0,(%rdi)
1584         leaq    512(%rdi),%rdi
1585         decl    %eax
1586         jnz     .Loop_scatter_1024
1587
1588         vzeroupper
1589         .byte   0xf3,0xc3
1590 .size   rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
1591
1592 .globl  rsaz_1024_gather5_avx2
1593 .type   rsaz_1024_gather5_avx2,@function
1594 .align  32
1595 rsaz_1024_gather5_avx2:
1596 .cfi_startproc  
1597         vzeroupper
1598         movq    %rsp,%r11
1599 .cfi_def_cfa_register   %r11
1600         leaq    -256(%rsp),%rsp
1601         andq    $-32,%rsp
1602         leaq    .Linc(%rip),%r10
1603         leaq    -128(%rsp),%rax
1604
1605         vmovd   %edx,%xmm4
1606         vmovdqa (%r10),%ymm0
1607         vmovdqa 32(%r10),%ymm1
1608         vmovdqa 64(%r10),%ymm5
1609         vpbroadcastd    %xmm4,%ymm4
1610
1611         vpaddd  %ymm5,%ymm0,%ymm2
1612         vpcmpeqd        %ymm4,%ymm0,%ymm0
1613         vpaddd  %ymm5,%ymm1,%ymm3
1614         vpcmpeqd        %ymm4,%ymm1,%ymm1
1615         vmovdqa %ymm0,0+128(%rax)
1616         vpaddd  %ymm5,%ymm2,%ymm0
1617         vpcmpeqd        %ymm4,%ymm2,%ymm2
1618         vmovdqa %ymm1,32+128(%rax)
1619         vpaddd  %ymm5,%ymm3,%ymm1
1620         vpcmpeqd        %ymm4,%ymm3,%ymm3
1621         vmovdqa %ymm2,64+128(%rax)
1622         vpaddd  %ymm5,%ymm0,%ymm2
1623         vpcmpeqd        %ymm4,%ymm0,%ymm0
1624         vmovdqa %ymm3,96+128(%rax)
1625         vpaddd  %ymm5,%ymm1,%ymm3
1626         vpcmpeqd        %ymm4,%ymm1,%ymm1
1627         vmovdqa %ymm0,128+128(%rax)
1628         vpaddd  %ymm5,%ymm2,%ymm8
1629         vpcmpeqd        %ymm4,%ymm2,%ymm2
1630         vmovdqa %ymm1,160+128(%rax)
1631         vpaddd  %ymm5,%ymm3,%ymm9
1632         vpcmpeqd        %ymm4,%ymm3,%ymm3
1633         vmovdqa %ymm2,192+128(%rax)
1634         vpaddd  %ymm5,%ymm8,%ymm10
1635         vpcmpeqd        %ymm4,%ymm8,%ymm8
1636         vmovdqa %ymm3,224+128(%rax)
1637         vpaddd  %ymm5,%ymm9,%ymm11
1638         vpcmpeqd        %ymm4,%ymm9,%ymm9
1639         vpaddd  %ymm5,%ymm10,%ymm12
1640         vpcmpeqd        %ymm4,%ymm10,%ymm10
1641         vpaddd  %ymm5,%ymm11,%ymm13
1642         vpcmpeqd        %ymm4,%ymm11,%ymm11
1643         vpaddd  %ymm5,%ymm12,%ymm14
1644         vpcmpeqd        %ymm4,%ymm12,%ymm12
1645         vpaddd  %ymm5,%ymm13,%ymm15
1646         vpcmpeqd        %ymm4,%ymm13,%ymm13
1647         vpcmpeqd        %ymm4,%ymm14,%ymm14
1648         vpcmpeqd        %ymm4,%ymm15,%ymm15
1649
1650         vmovdqa -32(%r10),%ymm7
1651         leaq    128(%rsi),%rsi
1652         movl    $9,%edx
1653
1654 .Loop_gather_1024:
1655         vmovdqa 0-128(%rsi),%ymm0
1656         vmovdqa 32-128(%rsi),%ymm1
1657         vmovdqa 64-128(%rsi),%ymm2
1658         vmovdqa 96-128(%rsi),%ymm3
1659         vpand   0+128(%rax),%ymm0,%ymm0
1660         vpand   32+128(%rax),%ymm1,%ymm1
1661         vpand   64+128(%rax),%ymm2,%ymm2
1662         vpor    %ymm0,%ymm1,%ymm4
1663         vpand   96+128(%rax),%ymm3,%ymm3
1664         vmovdqa 128-128(%rsi),%ymm0
1665         vmovdqa 160-128(%rsi),%ymm1
1666         vpor    %ymm2,%ymm3,%ymm5
1667         vmovdqa 192-128(%rsi),%ymm2
1668         vmovdqa 224-128(%rsi),%ymm3
1669         vpand   128+128(%rax),%ymm0,%ymm0
1670         vpand   160+128(%rax),%ymm1,%ymm1
1671         vpand   192+128(%rax),%ymm2,%ymm2
1672         vpor    %ymm0,%ymm4,%ymm4
1673         vpand   224+128(%rax),%ymm3,%ymm3
1674         vpand   256-128(%rsi),%ymm8,%ymm0
1675         vpor    %ymm1,%ymm5,%ymm5
1676         vpand   288-128(%rsi),%ymm9,%ymm1
1677         vpor    %ymm2,%ymm4,%ymm4
1678         vpand   320-128(%rsi),%ymm10,%ymm2
1679         vpor    %ymm3,%ymm5,%ymm5
1680         vpand   352-128(%rsi),%ymm11,%ymm3
1681         vpor    %ymm0,%ymm4,%ymm4
1682         vpand   384-128(%rsi),%ymm12,%ymm0
1683         vpor    %ymm1,%ymm5,%ymm5
1684         vpand   416-128(%rsi),%ymm13,%ymm1
1685         vpor    %ymm2,%ymm4,%ymm4
1686         vpand   448-128(%rsi),%ymm14,%ymm2
1687         vpor    %ymm3,%ymm5,%ymm5
1688         vpand   480-128(%rsi),%ymm15,%ymm3
1689         leaq    512(%rsi),%rsi
1690         vpor    %ymm0,%ymm4,%ymm4
1691         vpor    %ymm1,%ymm5,%ymm5
1692         vpor    %ymm2,%ymm4,%ymm4
1693         vpor    %ymm3,%ymm5,%ymm5
1694
1695         vpor    %ymm5,%ymm4,%ymm4
1696         vextracti128    $1,%ymm4,%xmm5
1697         vpor    %xmm4,%xmm5,%xmm5
1698         vpermd  %ymm5,%ymm7,%ymm5
1699         vmovdqu %ymm5,(%rdi)
1700         leaq    32(%rdi),%rdi
1701         decl    %edx
1702         jnz     .Loop_gather_1024
1703
1704         vpxor   %ymm0,%ymm0,%ymm0
1705         vmovdqu %ymm0,(%rdi)
1706         vzeroupper
1707         leaq    (%r11),%rsp
1708 .cfi_def_cfa_register   %rsp
1709         .byte   0xf3,0xc3
1710 .cfi_endproc    
1711 .LSEH_end_rsaz_1024_gather5:
1712 .size   rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
1713
1714 .globl  rsaz_avx2_eligible
1715 .type   rsaz_avx2_eligible,@function
1716 .align  32
1717 rsaz_avx2_eligible:
1718         movl    OPENSSL_ia32cap_P+8(%rip),%eax
1719         movl    $524544,%ecx
1720         movl    $0,%edx
1721         andl    %eax,%ecx
1722         cmpl    $524544,%ecx
1723         cmovel  %edx,%eax
1724         andl    $32,%eax
1725         shrl    $5,%eax
1726         .byte   0xf3,0xc3
1727 .size   rsaz_avx2_eligible,.-rsaz_avx2_eligible
1728
1729 .align  64
1730 .Land_mask:
1731 .quad   0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff
1732 .Lscatter_permd:
1733 .long   0,2,4,6,7,7,7,7
1734 .Lgather_permd:
1735 .long   0,7,1,7,2,7,3,7
1736 .Linc:
1737 .long   0,0,0,0, 1,1,1,1
1738 .long   2,2,2,2, 3,3,3,3
1739 .long   4,4,4,4, 4,4,4,4
1740 .align  64