~webapps/unity-js-scopes/node.js

« back to all changes in this revision

Viewing changes to deps/openssl/asm/x64-elf-gas/bn/rsaz-avx2.s

  • Committer: Marcus Tomlinson
  • Date: 2015-11-13 07:59:04 UTC
  • Revision ID: marcus.tomlinson@canonical.com-20151113075904-h0swczmoq1rvstfc
Node v4 (stable)

Show diffs side-by-side

added added

removed removed

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