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