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