Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S
48775 views
1
// SPDX-License-Identifier: Apache-2.0
2
// This file is generated from a similarly-named Perl script in the BoringSSL
3
// source tree. Do not edit by hand.
4
5
#if defined(__x86_64__) && defined(HAVE_AVX) && \
6
defined(HAVE_VAES) && defined(HAVE_VPCLMULQDQ)
7
8
#define _ASM
9
#include <sys/asm_linkage.h>
10
11
/* Windows userland links with OpenSSL */
12
#if !defined (_WIN32) || defined (_KERNEL)
13
14
.section .rodata
15
.balign 16
16
17
18
.Lbswap_mask:
19
.quad 0x08090a0b0c0d0e0f, 0x0001020304050607
20
21
22
23
24
25
26
27
28
.Lgfpoly:
29
.quad 1, 0xc200000000000000
30
31
32
.Lgfpoly_and_internal_carrybit:
33
.quad 1, 0xc200000000000001
34
35
.balign 32
36
37
.Lctr_pattern:
38
.quad 0, 0
39
.quad 1, 0
40
.Linc_2blocks:
41
.quad 2, 0
42
.quad 2, 0
43
44
ENTRY_ALIGN(gcm_init_vpclmulqdq_avx2, 32)
45
.cfi_startproc
46
47
ENDBR
48
49
50
51
52
53
vmovdqu (%rsi),%xmm3
54
// KCF/ICP stores H in network byte order with the hi qword first
55
// so we need to swap all bytes, not the 2 qwords.
56
vmovdqu .Lbswap_mask(%rip),%xmm4
57
vpshufb %xmm4,%xmm3,%xmm3
58
59
60
61
62
63
vpshufd $0xd3,%xmm3,%xmm0
64
vpsrad $31,%xmm0,%xmm0
65
vpaddq %xmm3,%xmm3,%xmm3
66
vpand .Lgfpoly_and_internal_carrybit(%rip),%xmm0,%xmm0
67
vpxor %xmm0,%xmm3,%xmm3
68
69
vbroadcasti128 .Lgfpoly(%rip),%ymm6
70
71
72
vpclmulqdq $0x00,%xmm3,%xmm3,%xmm0
73
vpclmulqdq $0x11,%xmm3,%xmm3,%xmm5
74
vpclmulqdq $0x01,%xmm0,%xmm6,%xmm1
75
vpshufd $0x4e,%xmm0,%xmm0
76
vpxor %xmm0,%xmm1,%xmm1
77
vpclmulqdq $0x01,%xmm1,%xmm6,%xmm0
78
vpshufd $0x4e,%xmm1,%xmm1
79
vpxor %xmm1,%xmm5,%xmm5
80
vpxor %xmm0,%xmm5,%xmm5
81
82
83
84
vinserti128 $1,%xmm3,%ymm5,%ymm3
85
vinserti128 $1,%xmm5,%ymm5,%ymm5
86
87
88
vpclmulqdq $0x00,%ymm5,%ymm3,%ymm0
89
vpclmulqdq $0x01,%ymm5,%ymm3,%ymm1
90
vpclmulqdq $0x10,%ymm5,%ymm3,%ymm2
91
vpxor %ymm2,%ymm1,%ymm1
92
vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2
93
vpshufd $0x4e,%ymm0,%ymm0
94
vpxor %ymm0,%ymm1,%ymm1
95
vpxor %ymm2,%ymm1,%ymm1
96
vpclmulqdq $0x11,%ymm5,%ymm3,%ymm4
97
vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0
98
vpshufd $0x4e,%ymm1,%ymm1
99
vpxor %ymm1,%ymm4,%ymm4
100
vpxor %ymm0,%ymm4,%ymm4
101
102
103
104
vmovdqu %ymm3,96(%rdi)
105
vmovdqu %ymm4,64(%rdi)
106
107
108
109
vpunpcklqdq %ymm3,%ymm4,%ymm0
110
vpunpckhqdq %ymm3,%ymm4,%ymm1
111
vpxor %ymm1,%ymm0,%ymm0
112
vmovdqu %ymm0,128+32(%rdi)
113
114
115
vpclmulqdq $0x00,%ymm5,%ymm4,%ymm0
116
vpclmulqdq $0x01,%ymm5,%ymm4,%ymm1
117
vpclmulqdq $0x10,%ymm5,%ymm4,%ymm2
118
vpxor %ymm2,%ymm1,%ymm1
119
vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2
120
vpshufd $0x4e,%ymm0,%ymm0
121
vpxor %ymm0,%ymm1,%ymm1
122
vpxor %ymm2,%ymm1,%ymm1
123
vpclmulqdq $0x11,%ymm5,%ymm4,%ymm3
124
vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0
125
vpshufd $0x4e,%ymm1,%ymm1
126
vpxor %ymm1,%ymm3,%ymm3
127
vpxor %ymm0,%ymm3,%ymm3
128
129
vpclmulqdq $0x00,%ymm5,%ymm3,%ymm0
130
vpclmulqdq $0x01,%ymm5,%ymm3,%ymm1
131
vpclmulqdq $0x10,%ymm5,%ymm3,%ymm2
132
vpxor %ymm2,%ymm1,%ymm1
133
vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2
134
vpshufd $0x4e,%ymm0,%ymm0
135
vpxor %ymm0,%ymm1,%ymm1
136
vpxor %ymm2,%ymm1,%ymm1
137
vpclmulqdq $0x11,%ymm5,%ymm3,%ymm4
138
vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0
139
vpshufd $0x4e,%ymm1,%ymm1
140
vpxor %ymm1,%ymm4,%ymm4
141
vpxor %ymm0,%ymm4,%ymm4
142
143
vmovdqu %ymm3,32(%rdi)
144
vmovdqu %ymm4,0(%rdi)
145
146
147
148
vpunpcklqdq %ymm3,%ymm4,%ymm0
149
vpunpckhqdq %ymm3,%ymm4,%ymm1
150
vpxor %ymm1,%ymm0,%ymm0
151
vmovdqu %ymm0,128(%rdi)
152
153
vzeroupper
154
RET
155
156
.cfi_endproc
157
SET_SIZE(gcm_init_vpclmulqdq_avx2)
158
ENTRY_ALIGN(gcm_gmult_vpclmulqdq_avx2, 32)
159
.cfi_startproc
160
161
ENDBR
162
163
164
165
vmovdqu (%rdi),%xmm0
166
vmovdqu .Lbswap_mask(%rip),%xmm1
167
vmovdqu 128-16(%rsi),%xmm2
168
vmovdqu .Lgfpoly(%rip),%xmm3
169
vpshufb %xmm1,%xmm0,%xmm0
170
171
vpclmulqdq $0x00,%xmm2,%xmm0,%xmm4
172
vpclmulqdq $0x01,%xmm2,%xmm0,%xmm5
173
vpclmulqdq $0x10,%xmm2,%xmm0,%xmm6
174
vpxor %xmm6,%xmm5,%xmm5
175
vpclmulqdq $0x01,%xmm4,%xmm3,%xmm6
176
vpshufd $0x4e,%xmm4,%xmm4
177
vpxor %xmm4,%xmm5,%xmm5
178
vpxor %xmm6,%xmm5,%xmm5
179
vpclmulqdq $0x11,%xmm2,%xmm0,%xmm0
180
vpclmulqdq $0x01,%xmm5,%xmm3,%xmm4
181
vpshufd $0x4e,%xmm5,%xmm5
182
vpxor %xmm5,%xmm0,%xmm0
183
vpxor %xmm4,%xmm0,%xmm0
184
185
186
vpshufb %xmm1,%xmm0,%xmm0
187
vmovdqu %xmm0,(%rdi)
188
189
190
RET
191
192
.cfi_endproc
193
SET_SIZE(gcm_gmult_vpclmulqdq_avx2)
194
ENTRY_ALIGN(gcm_ghash_vpclmulqdq_avx2, 32)
195
.cfi_startproc
196
197
ENDBR
198
199
200
201
202
203
204
vmovdqu .Lbswap_mask(%rip),%xmm6
205
vmovdqu .Lgfpoly(%rip),%xmm7
206
207
208
vmovdqu (%rdi),%xmm5
209
vpshufb %xmm6,%xmm5,%xmm5
210
211
212
cmpq $32,%rcx
213
jb .Lghash_lastblock
214
215
216
217
vinserti128 $1,%xmm6,%ymm6,%ymm6
218
vinserti128 $1,%xmm7,%ymm7,%ymm7
219
220
cmpq $127,%rcx
221
jbe .Lghash_loop_1x
222
223
224
vmovdqu 128(%rsi),%ymm8
225
vmovdqu 128+32(%rsi),%ymm9
226
.Lghash_loop_4x:
227
228
vmovdqu 0(%rdx),%ymm1
229
vpshufb %ymm6,%ymm1,%ymm1
230
vmovdqu 0(%rsi),%ymm2
231
vpxor %ymm5,%ymm1,%ymm1
232
vpclmulqdq $0x00,%ymm2,%ymm1,%ymm3
233
vpclmulqdq $0x11,%ymm2,%ymm1,%ymm5
234
vpunpckhqdq %ymm1,%ymm1,%ymm0
235
vpxor %ymm1,%ymm0,%ymm0
236
vpclmulqdq $0x00,%ymm8,%ymm0,%ymm4
237
238
vmovdqu 32(%rdx),%ymm1
239
vpshufb %ymm6,%ymm1,%ymm1
240
vmovdqu 32(%rsi),%ymm2
241
vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0
242
vpxor %ymm0,%ymm3,%ymm3
243
vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0
244
vpxor %ymm0,%ymm5,%ymm5
245
vpunpckhqdq %ymm1,%ymm1,%ymm0
246
vpxor %ymm1,%ymm0,%ymm0
247
vpclmulqdq $0x10,%ymm8,%ymm0,%ymm0
248
vpxor %ymm0,%ymm4,%ymm4
249
250
vmovdqu 64(%rdx),%ymm1
251
vpshufb %ymm6,%ymm1,%ymm1
252
vmovdqu 64(%rsi),%ymm2
253
vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0
254
vpxor %ymm0,%ymm3,%ymm3
255
vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0
256
vpxor %ymm0,%ymm5,%ymm5
257
vpunpckhqdq %ymm1,%ymm1,%ymm0
258
vpxor %ymm1,%ymm0,%ymm0
259
vpclmulqdq $0x00,%ymm9,%ymm0,%ymm0
260
vpxor %ymm0,%ymm4,%ymm4
261
262
263
vmovdqu 96(%rdx),%ymm1
264
vpshufb %ymm6,%ymm1,%ymm1
265
vmovdqu 96(%rsi),%ymm2
266
vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0
267
vpxor %ymm0,%ymm3,%ymm3
268
vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0
269
vpxor %ymm0,%ymm5,%ymm5
270
vpunpckhqdq %ymm1,%ymm1,%ymm0
271
vpxor %ymm1,%ymm0,%ymm0
272
vpclmulqdq $0x10,%ymm9,%ymm0,%ymm0
273
vpxor %ymm0,%ymm4,%ymm4
274
275
vpxor %ymm3,%ymm4,%ymm4
276
vpxor %ymm5,%ymm4,%ymm4
277
278
279
vbroadcasti128 .Lgfpoly(%rip),%ymm2
280
vpclmulqdq $0x01,%ymm3,%ymm2,%ymm0
281
vpshufd $0x4e,%ymm3,%ymm3
282
vpxor %ymm3,%ymm4,%ymm4
283
vpxor %ymm0,%ymm4,%ymm4
284
285
vpclmulqdq $0x01,%ymm4,%ymm2,%ymm0
286
vpshufd $0x4e,%ymm4,%ymm4
287
vpxor %ymm4,%ymm5,%ymm5
288
vpxor %ymm0,%ymm5,%ymm5
289
vextracti128 $1,%ymm5,%xmm0
290
vpxor %xmm0,%xmm5,%xmm5
291
292
subq $-128,%rdx
293
addq $-128,%rcx
294
cmpq $127,%rcx
295
ja .Lghash_loop_4x
296
297
298
cmpq $32,%rcx
299
jb .Lghash_loop_1x_done
300
.Lghash_loop_1x:
301
vmovdqu (%rdx),%ymm0
302
vpshufb %ymm6,%ymm0,%ymm0
303
vpxor %ymm0,%ymm5,%ymm5
304
vmovdqu 128-32(%rsi),%ymm0
305
vpclmulqdq $0x00,%ymm0,%ymm5,%ymm1
306
vpclmulqdq $0x01,%ymm0,%ymm5,%ymm2
307
vpclmulqdq $0x10,%ymm0,%ymm5,%ymm3
308
vpxor %ymm3,%ymm2,%ymm2
309
vpclmulqdq $0x01,%ymm1,%ymm7,%ymm3
310
vpshufd $0x4e,%ymm1,%ymm1
311
vpxor %ymm1,%ymm2,%ymm2
312
vpxor %ymm3,%ymm2,%ymm2
313
vpclmulqdq $0x11,%ymm0,%ymm5,%ymm5
314
vpclmulqdq $0x01,%ymm2,%ymm7,%ymm1
315
vpshufd $0x4e,%ymm2,%ymm2
316
vpxor %ymm2,%ymm5,%ymm5
317
vpxor %ymm1,%ymm5,%ymm5
318
319
vextracti128 $1,%ymm5,%xmm0
320
vpxor %xmm0,%xmm5,%xmm5
321
addq $32,%rdx
322
subq $32,%rcx
323
cmpq $32,%rcx
324
jae .Lghash_loop_1x
325
.Lghash_loop_1x_done:
326
327
328
.Lghash_lastblock:
329
testq %rcx,%rcx
330
jz .Lghash_done
331
vmovdqu (%rdx),%xmm0
332
vpshufb %xmm6,%xmm0,%xmm0
333
vpxor %xmm0,%xmm5,%xmm5
334
vmovdqu 128-16(%rsi),%xmm0
335
vpclmulqdq $0x00,%xmm0,%xmm5,%xmm1
336
vpclmulqdq $0x01,%xmm0,%xmm5,%xmm2
337
vpclmulqdq $0x10,%xmm0,%xmm5,%xmm3
338
vpxor %xmm3,%xmm2,%xmm2
339
vpclmulqdq $0x01,%xmm1,%xmm7,%xmm3
340
vpshufd $0x4e,%xmm1,%xmm1
341
vpxor %xmm1,%xmm2,%xmm2
342
vpxor %xmm3,%xmm2,%xmm2
343
vpclmulqdq $0x11,%xmm0,%xmm5,%xmm5
344
vpclmulqdq $0x01,%xmm2,%xmm7,%xmm1
345
vpshufd $0x4e,%xmm2,%xmm2
346
vpxor %xmm2,%xmm5,%xmm5
347
vpxor %xmm1,%xmm5,%xmm5
348
349
350
.Lghash_done:
351
352
vpshufb %xmm6,%xmm5,%xmm5
353
vmovdqu %xmm5,(%rdi)
354
355
vzeroupper
356
RET
357
358
.cfi_endproc
359
SET_SIZE(gcm_ghash_vpclmulqdq_avx2)
360
ENTRY_ALIGN(aes_gcm_enc_update_vaes_avx2, 32)
361
.cfi_startproc
362
363
ENDBR
364
pushq %r12
365
.cfi_adjust_cfa_offset 8
366
.cfi_offset %r12,-16
367
368
movq 16(%rsp),%r12
369
#ifdef BORINGSSL_DISPATCH_TEST
370
.extern BORINGSSL_function_hit
371
.hidden BORINGSSL_function_hit
372
movb $1,BORINGSSL_function_hit+6(%rip)
373
#endif
374
vbroadcasti128 .Lbswap_mask(%rip),%ymm0
375
376
377
378
vmovdqu (%r12),%xmm1
379
vpshufb %xmm0,%xmm1,%xmm1
380
vbroadcasti128 (%r8),%ymm11
381
vpshufb %ymm0,%ymm11,%ymm11
382
383
384
385
movl 504(%rcx),%r10d // ICP has a larger offset for rounds.
386
leal -24(,%r10,4),%r10d // ICP uses 10,12,14 not 9,11,13 for rounds.
387
388
389
390
391
leaq 96(%rcx,%r10,4),%r11
392
vbroadcasti128 (%rcx),%ymm9
393
vbroadcasti128 (%r11),%ymm10
394
395
396
vpaddd .Lctr_pattern(%rip),%ymm11,%ymm11
397
398
399
400
cmpq $127,%rdx
401
jbe .Lcrypt_loop_4x_done__func1
402
403
vmovdqu 128(%r9),%ymm7
404
vmovdqu 128+32(%r9),%ymm8
405
406
407
408
vmovdqu .Linc_2blocks(%rip),%ymm2
409
vpshufb %ymm0,%ymm11,%ymm12
410
vpaddd %ymm2,%ymm11,%ymm11
411
vpshufb %ymm0,%ymm11,%ymm13
412
vpaddd %ymm2,%ymm11,%ymm11
413
vpshufb %ymm0,%ymm11,%ymm14
414
vpaddd %ymm2,%ymm11,%ymm11
415
vpshufb %ymm0,%ymm11,%ymm15
416
vpaddd %ymm2,%ymm11,%ymm11
417
418
419
vpxor %ymm9,%ymm12,%ymm12
420
vpxor %ymm9,%ymm13,%ymm13
421
vpxor %ymm9,%ymm14,%ymm14
422
vpxor %ymm9,%ymm15,%ymm15
423
424
leaq 16(%rcx),%rax
425
.Lvaesenc_loop_first_4_vecs__func1:
426
vbroadcasti128 (%rax),%ymm2
427
vaesenc %ymm2,%ymm12,%ymm12
428
vaesenc %ymm2,%ymm13,%ymm13
429
vaesenc %ymm2,%ymm14,%ymm14
430
vaesenc %ymm2,%ymm15,%ymm15
431
432
addq $16,%rax
433
cmpq %rax,%r11
434
jne .Lvaesenc_loop_first_4_vecs__func1
435
vpxor 0(%rdi),%ymm10,%ymm2
436
vpxor 32(%rdi),%ymm10,%ymm3
437
vpxor 64(%rdi),%ymm10,%ymm5
438
vpxor 96(%rdi),%ymm10,%ymm6
439
vaesenclast %ymm2,%ymm12,%ymm12
440
vaesenclast %ymm3,%ymm13,%ymm13
441
vaesenclast %ymm5,%ymm14,%ymm14
442
vaesenclast %ymm6,%ymm15,%ymm15
443
vmovdqu %ymm12,0(%rsi)
444
vmovdqu %ymm13,32(%rsi)
445
vmovdqu %ymm14,64(%rsi)
446
vmovdqu %ymm15,96(%rsi)
447
448
subq $-128,%rdi
449
addq $-128,%rdx
450
cmpq $127,%rdx
451
jbe .Lghash_last_ciphertext_4x__func1
452
.balign 16
453
.Lcrypt_loop_4x__func1:
454
455
456
457
458
vmovdqu .Linc_2blocks(%rip),%ymm2
459
vpshufb %ymm0,%ymm11,%ymm12
460
vpaddd %ymm2,%ymm11,%ymm11
461
vpshufb %ymm0,%ymm11,%ymm13
462
vpaddd %ymm2,%ymm11,%ymm11
463
vpshufb %ymm0,%ymm11,%ymm14
464
vpaddd %ymm2,%ymm11,%ymm11
465
vpshufb %ymm0,%ymm11,%ymm15
466
vpaddd %ymm2,%ymm11,%ymm11
467
468
469
vpxor %ymm9,%ymm12,%ymm12
470
vpxor %ymm9,%ymm13,%ymm13
471
vpxor %ymm9,%ymm14,%ymm14
472
vpxor %ymm9,%ymm15,%ymm15
473
474
cmpl $24,%r10d
475
jl .Laes128__func1
476
je .Laes192__func1
477
478
vbroadcasti128 -208(%r11),%ymm2
479
vaesenc %ymm2,%ymm12,%ymm12
480
vaesenc %ymm2,%ymm13,%ymm13
481
vaesenc %ymm2,%ymm14,%ymm14
482
vaesenc %ymm2,%ymm15,%ymm15
483
484
vbroadcasti128 -192(%r11),%ymm2
485
vaesenc %ymm2,%ymm12,%ymm12
486
vaesenc %ymm2,%ymm13,%ymm13
487
vaesenc %ymm2,%ymm14,%ymm14
488
vaesenc %ymm2,%ymm15,%ymm15
489
490
.Laes192__func1:
491
vbroadcasti128 -176(%r11),%ymm2
492
vaesenc %ymm2,%ymm12,%ymm12
493
vaesenc %ymm2,%ymm13,%ymm13
494
vaesenc %ymm2,%ymm14,%ymm14
495
vaesenc %ymm2,%ymm15,%ymm15
496
497
vbroadcasti128 -160(%r11),%ymm2
498
vaesenc %ymm2,%ymm12,%ymm12
499
vaesenc %ymm2,%ymm13,%ymm13
500
vaesenc %ymm2,%ymm14,%ymm14
501
vaesenc %ymm2,%ymm15,%ymm15
502
503
.Laes128__func1:
504
prefetcht0 512(%rdi)
505
prefetcht0 512+64(%rdi)
506
507
vmovdqu 0(%rsi),%ymm3
508
vpshufb %ymm0,%ymm3,%ymm3
509
vmovdqu 0(%r9),%ymm4
510
vpxor %ymm1,%ymm3,%ymm3
511
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5
512
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1
513
vpunpckhqdq %ymm3,%ymm3,%ymm2
514
vpxor %ymm3,%ymm2,%ymm2
515
vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6
516
517
vbroadcasti128 -144(%r11),%ymm2
518
vaesenc %ymm2,%ymm12,%ymm12
519
vaesenc %ymm2,%ymm13,%ymm13
520
vaesenc %ymm2,%ymm14,%ymm14
521
vaesenc %ymm2,%ymm15,%ymm15
522
523
524
vbroadcasti128 -128(%r11),%ymm2
525
vaesenc %ymm2,%ymm12,%ymm12
526
vaesenc %ymm2,%ymm13,%ymm13
527
vaesenc %ymm2,%ymm14,%ymm14
528
vaesenc %ymm2,%ymm15,%ymm15
529
530
531
vmovdqu 32(%rsi),%ymm3
532
vpshufb %ymm0,%ymm3,%ymm3
533
vmovdqu 32(%r9),%ymm4
534
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
535
vpxor %ymm2,%ymm5,%ymm5
536
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
537
vpxor %ymm2,%ymm1,%ymm1
538
vpunpckhqdq %ymm3,%ymm3,%ymm2
539
vpxor %ymm3,%ymm2,%ymm2
540
vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2
541
vpxor %ymm2,%ymm6,%ymm6
542
543
vbroadcasti128 -112(%r11),%ymm2
544
vaesenc %ymm2,%ymm12,%ymm12
545
vaesenc %ymm2,%ymm13,%ymm13
546
vaesenc %ymm2,%ymm14,%ymm14
547
vaesenc %ymm2,%ymm15,%ymm15
548
549
550
vmovdqu 64(%rsi),%ymm3
551
vpshufb %ymm0,%ymm3,%ymm3
552
vmovdqu 64(%r9),%ymm4
553
554
vbroadcasti128 -96(%r11),%ymm2
555
vaesenc %ymm2,%ymm12,%ymm12
556
vaesenc %ymm2,%ymm13,%ymm13
557
vaesenc %ymm2,%ymm14,%ymm14
558
vaesenc %ymm2,%ymm15,%ymm15
559
560
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
561
vpxor %ymm2,%ymm5,%ymm5
562
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
563
vpxor %ymm2,%ymm1,%ymm1
564
565
vbroadcasti128 -80(%r11),%ymm2
566
vaesenc %ymm2,%ymm12,%ymm12
567
vaesenc %ymm2,%ymm13,%ymm13
568
vaesenc %ymm2,%ymm14,%ymm14
569
vaesenc %ymm2,%ymm15,%ymm15
570
571
vpunpckhqdq %ymm3,%ymm3,%ymm2
572
vpxor %ymm3,%ymm2,%ymm2
573
vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2
574
vpxor %ymm2,%ymm6,%ymm6
575
576
577
vmovdqu 96(%rsi),%ymm3
578
vpshufb %ymm0,%ymm3,%ymm3
579
580
vbroadcasti128 -64(%r11),%ymm2
581
vaesenc %ymm2,%ymm12,%ymm12
582
vaesenc %ymm2,%ymm13,%ymm13
583
vaesenc %ymm2,%ymm14,%ymm14
584
vaesenc %ymm2,%ymm15,%ymm15
585
586
vmovdqu 96(%r9),%ymm4
587
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
588
vpxor %ymm2,%ymm5,%ymm5
589
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
590
vpxor %ymm2,%ymm1,%ymm1
591
vpunpckhqdq %ymm3,%ymm3,%ymm2
592
vpxor %ymm3,%ymm2,%ymm2
593
vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2
594
vpxor %ymm2,%ymm6,%ymm6
595
596
vbroadcasti128 -48(%r11),%ymm2
597
vaesenc %ymm2,%ymm12,%ymm12
598
vaesenc %ymm2,%ymm13,%ymm13
599
vaesenc %ymm2,%ymm14,%ymm14
600
vaesenc %ymm2,%ymm15,%ymm15
601
602
603
vpxor %ymm5,%ymm6,%ymm6
604
vpxor %ymm1,%ymm6,%ymm6
605
606
607
vbroadcasti128 .Lgfpoly(%rip),%ymm4
608
vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2
609
vpshufd $0x4e,%ymm5,%ymm5
610
vpxor %ymm5,%ymm6,%ymm6
611
vpxor %ymm2,%ymm6,%ymm6
612
613
vbroadcasti128 -32(%r11),%ymm2
614
vaesenc %ymm2,%ymm12,%ymm12
615
vaesenc %ymm2,%ymm13,%ymm13
616
vaesenc %ymm2,%ymm14,%ymm14
617
vaesenc %ymm2,%ymm15,%ymm15
618
619
620
vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2
621
vpshufd $0x4e,%ymm6,%ymm6
622
vpxor %ymm6,%ymm1,%ymm1
623
vpxor %ymm2,%ymm1,%ymm1
624
625
vbroadcasti128 -16(%r11),%ymm2
626
vaesenc %ymm2,%ymm12,%ymm12
627
vaesenc %ymm2,%ymm13,%ymm13
628
vaesenc %ymm2,%ymm14,%ymm14
629
vaesenc %ymm2,%ymm15,%ymm15
630
631
vextracti128 $1,%ymm1,%xmm2
632
vpxor %xmm2,%xmm1,%xmm1
633
634
635
subq $-128,%rsi
636
vpxor 0(%rdi),%ymm10,%ymm2
637
vpxor 32(%rdi),%ymm10,%ymm3
638
vpxor 64(%rdi),%ymm10,%ymm5
639
vpxor 96(%rdi),%ymm10,%ymm6
640
vaesenclast %ymm2,%ymm12,%ymm12
641
vaesenclast %ymm3,%ymm13,%ymm13
642
vaesenclast %ymm5,%ymm14,%ymm14
643
vaesenclast %ymm6,%ymm15,%ymm15
644
vmovdqu %ymm12,0(%rsi)
645
vmovdqu %ymm13,32(%rsi)
646
vmovdqu %ymm14,64(%rsi)
647
vmovdqu %ymm15,96(%rsi)
648
649
subq $-128,%rdi
650
651
addq $-128,%rdx
652
cmpq $127,%rdx
653
ja .Lcrypt_loop_4x__func1
654
.Lghash_last_ciphertext_4x__func1:
655
656
vmovdqu 0(%rsi),%ymm3
657
vpshufb %ymm0,%ymm3,%ymm3
658
vmovdqu 0(%r9),%ymm4
659
vpxor %ymm1,%ymm3,%ymm3
660
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5
661
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1
662
vpunpckhqdq %ymm3,%ymm3,%ymm2
663
vpxor %ymm3,%ymm2,%ymm2
664
vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6
665
666
vmovdqu 32(%rsi),%ymm3
667
vpshufb %ymm0,%ymm3,%ymm3
668
vmovdqu 32(%r9),%ymm4
669
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
670
vpxor %ymm2,%ymm5,%ymm5
671
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
672
vpxor %ymm2,%ymm1,%ymm1
673
vpunpckhqdq %ymm3,%ymm3,%ymm2
674
vpxor %ymm3,%ymm2,%ymm2
675
vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2
676
vpxor %ymm2,%ymm6,%ymm6
677
678
vmovdqu 64(%rsi),%ymm3
679
vpshufb %ymm0,%ymm3,%ymm3
680
vmovdqu 64(%r9),%ymm4
681
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
682
vpxor %ymm2,%ymm5,%ymm5
683
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
684
vpxor %ymm2,%ymm1,%ymm1
685
vpunpckhqdq %ymm3,%ymm3,%ymm2
686
vpxor %ymm3,%ymm2,%ymm2
687
vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2
688
vpxor %ymm2,%ymm6,%ymm6
689
690
691
vmovdqu 96(%rsi),%ymm3
692
vpshufb %ymm0,%ymm3,%ymm3
693
vmovdqu 96(%r9),%ymm4
694
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
695
vpxor %ymm2,%ymm5,%ymm5
696
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
697
vpxor %ymm2,%ymm1,%ymm1
698
vpunpckhqdq %ymm3,%ymm3,%ymm2
699
vpxor %ymm3,%ymm2,%ymm2
700
vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2
701
vpxor %ymm2,%ymm6,%ymm6
702
703
vpxor %ymm5,%ymm6,%ymm6
704
vpxor %ymm1,%ymm6,%ymm6
705
706
707
vbroadcasti128 .Lgfpoly(%rip),%ymm4
708
vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2
709
vpshufd $0x4e,%ymm5,%ymm5
710
vpxor %ymm5,%ymm6,%ymm6
711
vpxor %ymm2,%ymm6,%ymm6
712
713
vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2
714
vpshufd $0x4e,%ymm6,%ymm6
715
vpxor %ymm6,%ymm1,%ymm1
716
vpxor %ymm2,%ymm1,%ymm1
717
vextracti128 $1,%ymm1,%xmm2
718
vpxor %xmm2,%xmm1,%xmm1
719
720
subq $-128,%rsi
721
.Lcrypt_loop_4x_done__func1:
722
723
testq %rdx,%rdx
724
jz .Ldone__func1
725
726
727
728
729
730
leaq 128(%r9),%r8
731
subq %rdx,%r8
732
733
734
vpxor %xmm5,%xmm5,%xmm5
735
vpxor %xmm6,%xmm6,%xmm6
736
vpxor %xmm7,%xmm7,%xmm7
737
738
cmpq $64,%rdx
739
jb .Llessthan64bytes__func1
740
741
742
vpshufb %ymm0,%ymm11,%ymm12
743
vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11
744
vpshufb %ymm0,%ymm11,%ymm13
745
vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11
746
vpxor %ymm9,%ymm12,%ymm12
747
vpxor %ymm9,%ymm13,%ymm13
748
leaq 16(%rcx),%rax
749
.Lvaesenc_loop_tail_1__func1:
750
vbroadcasti128 (%rax),%ymm2
751
vaesenc %ymm2,%ymm12,%ymm12
752
vaesenc %ymm2,%ymm13,%ymm13
753
addq $16,%rax
754
cmpq %rax,%r11
755
jne .Lvaesenc_loop_tail_1__func1
756
vaesenclast %ymm10,%ymm12,%ymm12
757
vaesenclast %ymm10,%ymm13,%ymm13
758
759
760
vmovdqu 0(%rdi),%ymm2
761
vmovdqu 32(%rdi),%ymm3
762
vpxor %ymm2,%ymm12,%ymm12
763
vpxor %ymm3,%ymm13,%ymm13
764
vmovdqu %ymm12,0(%rsi)
765
vmovdqu %ymm13,32(%rsi)
766
767
768
vpshufb %ymm0,%ymm12,%ymm12
769
vpshufb %ymm0,%ymm13,%ymm13
770
vpxor %ymm1,%ymm12,%ymm12
771
vmovdqu (%r8),%ymm2
772
vmovdqu 32(%r8),%ymm3
773
vpclmulqdq $0x00,%ymm2,%ymm12,%ymm5
774
vpclmulqdq $0x01,%ymm2,%ymm12,%ymm6
775
vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4
776
vpxor %ymm4,%ymm6,%ymm6
777
vpclmulqdq $0x11,%ymm2,%ymm12,%ymm7
778
vpclmulqdq $0x00,%ymm3,%ymm13,%ymm4
779
vpxor %ymm4,%ymm5,%ymm5
780
vpclmulqdq $0x01,%ymm3,%ymm13,%ymm4
781
vpxor %ymm4,%ymm6,%ymm6
782
vpclmulqdq $0x10,%ymm3,%ymm13,%ymm4
783
vpxor %ymm4,%ymm6,%ymm6
784
vpclmulqdq $0x11,%ymm3,%ymm13,%ymm4
785
vpxor %ymm4,%ymm7,%ymm7
786
787
addq $64,%r8
788
addq $64,%rdi
789
addq $64,%rsi
790
subq $64,%rdx
791
jz .Lreduce__func1
792
793
vpxor %xmm1,%xmm1,%xmm1
794
795
796
.Llessthan64bytes__func1:
797
vpshufb %ymm0,%ymm11,%ymm12
798
vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11
799
vpshufb %ymm0,%ymm11,%ymm13
800
vpxor %ymm9,%ymm12,%ymm12
801
vpxor %ymm9,%ymm13,%ymm13
802
leaq 16(%rcx),%rax
803
.Lvaesenc_loop_tail_2__func1:
804
vbroadcasti128 (%rax),%ymm2
805
vaesenc %ymm2,%ymm12,%ymm12
806
vaesenc %ymm2,%ymm13,%ymm13
807
addq $16,%rax
808
cmpq %rax,%r11
809
jne .Lvaesenc_loop_tail_2__func1
810
vaesenclast %ymm10,%ymm12,%ymm12
811
vaesenclast %ymm10,%ymm13,%ymm13
812
813
814
815
816
cmpq $32,%rdx
817
jb .Lxor_one_block__func1
818
je .Lxor_two_blocks__func1
819
820
.Lxor_three_blocks__func1:
821
vmovdqu 0(%rdi),%ymm2
822
vmovdqu 32(%rdi),%xmm3
823
vpxor %ymm2,%ymm12,%ymm12
824
vpxor %xmm3,%xmm13,%xmm13
825
vmovdqu %ymm12,0(%rsi)
826
vmovdqu %xmm13,32(%rsi)
827
828
vpshufb %ymm0,%ymm12,%ymm12
829
vpshufb %xmm0,%xmm13,%xmm13
830
vpxor %ymm1,%ymm12,%ymm12
831
vmovdqu (%r8),%ymm2
832
vmovdqu 32(%r8),%xmm3
833
vpclmulqdq $0x00,%xmm3,%xmm13,%xmm4
834
vpxor %ymm4,%ymm5,%ymm5
835
vpclmulqdq $0x01,%xmm3,%xmm13,%xmm4
836
vpxor %ymm4,%ymm6,%ymm6
837
vpclmulqdq $0x10,%xmm3,%xmm13,%xmm4
838
vpxor %ymm4,%ymm6,%ymm6
839
vpclmulqdq $0x11,%xmm3,%xmm13,%xmm4
840
vpxor %ymm4,%ymm7,%ymm7
841
jmp .Lghash_mul_one_vec_unreduced__func1
842
843
.Lxor_two_blocks__func1:
844
vmovdqu (%rdi),%ymm2
845
vpxor %ymm2,%ymm12,%ymm12
846
vmovdqu %ymm12,(%rsi)
847
vpshufb %ymm0,%ymm12,%ymm12
848
vpxor %ymm1,%ymm12,%ymm12
849
vmovdqu (%r8),%ymm2
850
jmp .Lghash_mul_one_vec_unreduced__func1
851
852
.Lxor_one_block__func1:
853
vmovdqu (%rdi),%xmm2
854
vpxor %xmm2,%xmm12,%xmm12
855
vmovdqu %xmm12,(%rsi)
856
vpshufb %xmm0,%xmm12,%xmm12
857
vpxor %xmm1,%xmm12,%xmm12
858
vmovdqu (%r8),%xmm2
859
860
.Lghash_mul_one_vec_unreduced__func1:
861
vpclmulqdq $0x00,%ymm2,%ymm12,%ymm4
862
vpxor %ymm4,%ymm5,%ymm5
863
vpclmulqdq $0x01,%ymm2,%ymm12,%ymm4
864
vpxor %ymm4,%ymm6,%ymm6
865
vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4
866
vpxor %ymm4,%ymm6,%ymm6
867
vpclmulqdq $0x11,%ymm2,%ymm12,%ymm4
868
vpxor %ymm4,%ymm7,%ymm7
869
870
.Lreduce__func1:
871
872
vbroadcasti128 .Lgfpoly(%rip),%ymm2
873
vpclmulqdq $0x01,%ymm5,%ymm2,%ymm3
874
vpshufd $0x4e,%ymm5,%ymm5
875
vpxor %ymm5,%ymm6,%ymm6
876
vpxor %ymm3,%ymm6,%ymm6
877
vpclmulqdq $0x01,%ymm6,%ymm2,%ymm3
878
vpshufd $0x4e,%ymm6,%ymm6
879
vpxor %ymm6,%ymm7,%ymm7
880
vpxor %ymm3,%ymm7,%ymm7
881
vextracti128 $1,%ymm7,%xmm1
882
vpxor %xmm7,%xmm1,%xmm1
883
884
.Ldone__func1:
885
886
vpshufb %xmm0,%xmm1,%xmm1
887
vmovdqu %xmm1,(%r12)
888
889
vzeroupper
890
popq %r12
891
.cfi_adjust_cfa_offset -8
892
.cfi_restore %r12
893
RET
894
895
.cfi_endproc
896
SET_SIZE(aes_gcm_enc_update_vaes_avx2)
897
ENTRY_ALIGN(aes_gcm_dec_update_vaes_avx2, 32)
898
.cfi_startproc
899
900
ENDBR
901
pushq %r12
902
.cfi_adjust_cfa_offset 8
903
.cfi_offset %r12,-16
904
905
movq 16(%rsp),%r12
906
vbroadcasti128 .Lbswap_mask(%rip),%ymm0
907
908
909
910
vmovdqu (%r12),%xmm1
911
vpshufb %xmm0,%xmm1,%xmm1
912
vbroadcasti128 (%r8),%ymm11
913
vpshufb %ymm0,%ymm11,%ymm11
914
915
916
917
movl 504(%rcx),%r10d // ICP has a larger offset for rounds.
918
leal -24(,%r10,4),%r10d // ICP uses 10,12,14 not 9,11,13 for rounds.
919
920
921
922
923
leaq 96(%rcx,%r10,4),%r11
924
vbroadcasti128 (%rcx),%ymm9
925
vbroadcasti128 (%r11),%ymm10
926
927
928
vpaddd .Lctr_pattern(%rip),%ymm11,%ymm11
929
930
931
932
cmpq $127,%rdx
933
jbe .Lcrypt_loop_4x_done__func2
934
935
vmovdqu 128(%r9),%ymm7
936
vmovdqu 128+32(%r9),%ymm8
937
.balign 16
938
.Lcrypt_loop_4x__func2:
939
940
941
942
943
vmovdqu .Linc_2blocks(%rip),%ymm2
944
vpshufb %ymm0,%ymm11,%ymm12
945
vpaddd %ymm2,%ymm11,%ymm11
946
vpshufb %ymm0,%ymm11,%ymm13
947
vpaddd %ymm2,%ymm11,%ymm11
948
vpshufb %ymm0,%ymm11,%ymm14
949
vpaddd %ymm2,%ymm11,%ymm11
950
vpshufb %ymm0,%ymm11,%ymm15
951
vpaddd %ymm2,%ymm11,%ymm11
952
953
954
vpxor %ymm9,%ymm12,%ymm12
955
vpxor %ymm9,%ymm13,%ymm13
956
vpxor %ymm9,%ymm14,%ymm14
957
vpxor %ymm9,%ymm15,%ymm15
958
959
cmpl $24,%r10d
960
jl .Laes128__func2
961
je .Laes192__func2
962
963
vbroadcasti128 -208(%r11),%ymm2
964
vaesenc %ymm2,%ymm12,%ymm12
965
vaesenc %ymm2,%ymm13,%ymm13
966
vaesenc %ymm2,%ymm14,%ymm14
967
vaesenc %ymm2,%ymm15,%ymm15
968
969
vbroadcasti128 -192(%r11),%ymm2
970
vaesenc %ymm2,%ymm12,%ymm12
971
vaesenc %ymm2,%ymm13,%ymm13
972
vaesenc %ymm2,%ymm14,%ymm14
973
vaesenc %ymm2,%ymm15,%ymm15
974
975
.Laes192__func2:
976
vbroadcasti128 -176(%r11),%ymm2
977
vaesenc %ymm2,%ymm12,%ymm12
978
vaesenc %ymm2,%ymm13,%ymm13
979
vaesenc %ymm2,%ymm14,%ymm14
980
vaesenc %ymm2,%ymm15,%ymm15
981
982
vbroadcasti128 -160(%r11),%ymm2
983
vaesenc %ymm2,%ymm12,%ymm12
984
vaesenc %ymm2,%ymm13,%ymm13
985
vaesenc %ymm2,%ymm14,%ymm14
986
vaesenc %ymm2,%ymm15,%ymm15
987
988
.Laes128__func2:
989
prefetcht0 512(%rdi)
990
prefetcht0 512+64(%rdi)
991
992
vmovdqu 0(%rdi),%ymm3
993
vpshufb %ymm0,%ymm3,%ymm3
994
vmovdqu 0(%r9),%ymm4
995
vpxor %ymm1,%ymm3,%ymm3
996
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5
997
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1
998
vpunpckhqdq %ymm3,%ymm3,%ymm2
999
vpxor %ymm3,%ymm2,%ymm2
1000
vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6
1001
1002
vbroadcasti128 -144(%r11),%ymm2
1003
vaesenc %ymm2,%ymm12,%ymm12
1004
vaesenc %ymm2,%ymm13,%ymm13
1005
vaesenc %ymm2,%ymm14,%ymm14
1006
vaesenc %ymm2,%ymm15,%ymm15
1007
1008
1009
vbroadcasti128 -128(%r11),%ymm2
1010
vaesenc %ymm2,%ymm12,%ymm12
1011
vaesenc %ymm2,%ymm13,%ymm13
1012
vaesenc %ymm2,%ymm14,%ymm14
1013
vaesenc %ymm2,%ymm15,%ymm15
1014
1015
1016
vmovdqu 32(%rdi),%ymm3
1017
vpshufb %ymm0,%ymm3,%ymm3
1018
vmovdqu 32(%r9),%ymm4
1019
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
1020
vpxor %ymm2,%ymm5,%ymm5
1021
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
1022
vpxor %ymm2,%ymm1,%ymm1
1023
vpunpckhqdq %ymm3,%ymm3,%ymm2
1024
vpxor %ymm3,%ymm2,%ymm2
1025
vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2
1026
vpxor %ymm2,%ymm6,%ymm6
1027
1028
vbroadcasti128 -112(%r11),%ymm2
1029
vaesenc %ymm2,%ymm12,%ymm12
1030
vaesenc %ymm2,%ymm13,%ymm13
1031
vaesenc %ymm2,%ymm14,%ymm14
1032
vaesenc %ymm2,%ymm15,%ymm15
1033
1034
1035
vmovdqu 64(%rdi),%ymm3
1036
vpshufb %ymm0,%ymm3,%ymm3
1037
vmovdqu 64(%r9),%ymm4
1038
1039
vbroadcasti128 -96(%r11),%ymm2
1040
vaesenc %ymm2,%ymm12,%ymm12
1041
vaesenc %ymm2,%ymm13,%ymm13
1042
vaesenc %ymm2,%ymm14,%ymm14
1043
vaesenc %ymm2,%ymm15,%ymm15
1044
1045
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
1046
vpxor %ymm2,%ymm5,%ymm5
1047
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
1048
vpxor %ymm2,%ymm1,%ymm1
1049
1050
vbroadcasti128 -80(%r11),%ymm2
1051
vaesenc %ymm2,%ymm12,%ymm12
1052
vaesenc %ymm2,%ymm13,%ymm13
1053
vaesenc %ymm2,%ymm14,%ymm14
1054
vaesenc %ymm2,%ymm15,%ymm15
1055
1056
vpunpckhqdq %ymm3,%ymm3,%ymm2
1057
vpxor %ymm3,%ymm2,%ymm2
1058
vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2
1059
vpxor %ymm2,%ymm6,%ymm6
1060
1061
1062
vmovdqu 96(%rdi),%ymm3
1063
vpshufb %ymm0,%ymm3,%ymm3
1064
1065
vbroadcasti128 -64(%r11),%ymm2
1066
vaesenc %ymm2,%ymm12,%ymm12
1067
vaesenc %ymm2,%ymm13,%ymm13
1068
vaesenc %ymm2,%ymm14,%ymm14
1069
vaesenc %ymm2,%ymm15,%ymm15
1070
1071
vmovdqu 96(%r9),%ymm4
1072
vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2
1073
vpxor %ymm2,%ymm5,%ymm5
1074
vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2
1075
vpxor %ymm2,%ymm1,%ymm1
1076
vpunpckhqdq %ymm3,%ymm3,%ymm2
1077
vpxor %ymm3,%ymm2,%ymm2
1078
vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2
1079
vpxor %ymm2,%ymm6,%ymm6
1080
1081
vbroadcasti128 -48(%r11),%ymm2
1082
vaesenc %ymm2,%ymm12,%ymm12
1083
vaesenc %ymm2,%ymm13,%ymm13
1084
vaesenc %ymm2,%ymm14,%ymm14
1085
vaesenc %ymm2,%ymm15,%ymm15
1086
1087
1088
vpxor %ymm5,%ymm6,%ymm6
1089
vpxor %ymm1,%ymm6,%ymm6
1090
1091
1092
vbroadcasti128 .Lgfpoly(%rip),%ymm4
1093
vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2
1094
vpshufd $0x4e,%ymm5,%ymm5
1095
vpxor %ymm5,%ymm6,%ymm6
1096
vpxor %ymm2,%ymm6,%ymm6
1097
1098
vbroadcasti128 -32(%r11),%ymm2
1099
vaesenc %ymm2,%ymm12,%ymm12
1100
vaesenc %ymm2,%ymm13,%ymm13
1101
vaesenc %ymm2,%ymm14,%ymm14
1102
vaesenc %ymm2,%ymm15,%ymm15
1103
1104
1105
vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2
1106
vpshufd $0x4e,%ymm6,%ymm6
1107
vpxor %ymm6,%ymm1,%ymm1
1108
vpxor %ymm2,%ymm1,%ymm1
1109
1110
vbroadcasti128 -16(%r11),%ymm2
1111
vaesenc %ymm2,%ymm12,%ymm12
1112
vaesenc %ymm2,%ymm13,%ymm13
1113
vaesenc %ymm2,%ymm14,%ymm14
1114
vaesenc %ymm2,%ymm15,%ymm15
1115
1116
vextracti128 $1,%ymm1,%xmm2
1117
vpxor %xmm2,%xmm1,%xmm1
1118
1119
1120
1121
vpxor 0(%rdi),%ymm10,%ymm2
1122
vpxor 32(%rdi),%ymm10,%ymm3
1123
vpxor 64(%rdi),%ymm10,%ymm5
1124
vpxor 96(%rdi),%ymm10,%ymm6
1125
vaesenclast %ymm2,%ymm12,%ymm12
1126
vaesenclast %ymm3,%ymm13,%ymm13
1127
vaesenclast %ymm5,%ymm14,%ymm14
1128
vaesenclast %ymm6,%ymm15,%ymm15
1129
vmovdqu %ymm12,0(%rsi)
1130
vmovdqu %ymm13,32(%rsi)
1131
vmovdqu %ymm14,64(%rsi)
1132
vmovdqu %ymm15,96(%rsi)
1133
1134
subq $-128,%rdi
1135
subq $-128,%rsi
1136
addq $-128,%rdx
1137
cmpq $127,%rdx
1138
ja .Lcrypt_loop_4x__func2
1139
.Lcrypt_loop_4x_done__func2:
1140
1141
testq %rdx,%rdx
1142
jz .Ldone__func2
1143
1144
1145
1146
1147
1148
leaq 128(%r9),%r8
1149
subq %rdx,%r8
1150
1151
1152
vpxor %xmm5,%xmm5,%xmm5
1153
vpxor %xmm6,%xmm6,%xmm6
1154
vpxor %xmm7,%xmm7,%xmm7
1155
1156
cmpq $64,%rdx
1157
jb .Llessthan64bytes__func2
1158
1159
1160
vpshufb %ymm0,%ymm11,%ymm12
1161
vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11
1162
vpshufb %ymm0,%ymm11,%ymm13
1163
vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11
1164
vpxor %ymm9,%ymm12,%ymm12
1165
vpxor %ymm9,%ymm13,%ymm13
1166
leaq 16(%rcx),%rax
1167
.Lvaesenc_loop_tail_1__func2:
1168
vbroadcasti128 (%rax),%ymm2
1169
vaesenc %ymm2,%ymm12,%ymm12
1170
vaesenc %ymm2,%ymm13,%ymm13
1171
addq $16,%rax
1172
cmpq %rax,%r11
1173
jne .Lvaesenc_loop_tail_1__func2
1174
vaesenclast %ymm10,%ymm12,%ymm12
1175
vaesenclast %ymm10,%ymm13,%ymm13
1176
1177
1178
vmovdqu 0(%rdi),%ymm2
1179
vmovdqu 32(%rdi),%ymm3
1180
vpxor %ymm2,%ymm12,%ymm12
1181
vpxor %ymm3,%ymm13,%ymm13
1182
vmovdqu %ymm12,0(%rsi)
1183
vmovdqu %ymm13,32(%rsi)
1184
1185
1186
vpshufb %ymm0,%ymm2,%ymm12
1187
vpshufb %ymm0,%ymm3,%ymm13
1188
vpxor %ymm1,%ymm12,%ymm12
1189
vmovdqu (%r8),%ymm2
1190
vmovdqu 32(%r8),%ymm3
1191
vpclmulqdq $0x00,%ymm2,%ymm12,%ymm5
1192
vpclmulqdq $0x01,%ymm2,%ymm12,%ymm6
1193
vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4
1194
vpxor %ymm4,%ymm6,%ymm6
1195
vpclmulqdq $0x11,%ymm2,%ymm12,%ymm7
1196
vpclmulqdq $0x00,%ymm3,%ymm13,%ymm4
1197
vpxor %ymm4,%ymm5,%ymm5
1198
vpclmulqdq $0x01,%ymm3,%ymm13,%ymm4
1199
vpxor %ymm4,%ymm6,%ymm6
1200
vpclmulqdq $0x10,%ymm3,%ymm13,%ymm4
1201
vpxor %ymm4,%ymm6,%ymm6
1202
vpclmulqdq $0x11,%ymm3,%ymm13,%ymm4
1203
vpxor %ymm4,%ymm7,%ymm7
1204
1205
addq $64,%r8
1206
addq $64,%rdi
1207
addq $64,%rsi
1208
subq $64,%rdx
1209
jz .Lreduce__func2
1210
1211
vpxor %xmm1,%xmm1,%xmm1
1212
1213
1214
.Llessthan64bytes__func2:
1215
vpshufb %ymm0,%ymm11,%ymm12
1216
vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11
1217
vpshufb %ymm0,%ymm11,%ymm13
1218
vpxor %ymm9,%ymm12,%ymm12
1219
vpxor %ymm9,%ymm13,%ymm13
1220
leaq 16(%rcx),%rax
1221
.Lvaesenc_loop_tail_2__func2:
1222
vbroadcasti128 (%rax),%ymm2
1223
vaesenc %ymm2,%ymm12,%ymm12
1224
vaesenc %ymm2,%ymm13,%ymm13
1225
addq $16,%rax
1226
cmpq %rax,%r11
1227
jne .Lvaesenc_loop_tail_2__func2
1228
vaesenclast %ymm10,%ymm12,%ymm12
1229
vaesenclast %ymm10,%ymm13,%ymm13
1230
1231
1232
1233
1234
cmpq $32,%rdx
1235
jb .Lxor_one_block__func2
1236
je .Lxor_two_blocks__func2
1237
1238
.Lxor_three_blocks__func2:
1239
vmovdqu 0(%rdi),%ymm2
1240
vmovdqu 32(%rdi),%xmm3
1241
vpxor %ymm2,%ymm12,%ymm12
1242
vpxor %xmm3,%xmm13,%xmm13
1243
vmovdqu %ymm12,0(%rsi)
1244
vmovdqu %xmm13,32(%rsi)
1245
1246
vpshufb %ymm0,%ymm2,%ymm12
1247
vpshufb %xmm0,%xmm3,%xmm13
1248
vpxor %ymm1,%ymm12,%ymm12
1249
vmovdqu (%r8),%ymm2
1250
vmovdqu 32(%r8),%xmm3
1251
vpclmulqdq $0x00,%xmm3,%xmm13,%xmm4
1252
vpxor %ymm4,%ymm5,%ymm5
1253
vpclmulqdq $0x01,%xmm3,%xmm13,%xmm4
1254
vpxor %ymm4,%ymm6,%ymm6
1255
vpclmulqdq $0x10,%xmm3,%xmm13,%xmm4
1256
vpxor %ymm4,%ymm6,%ymm6
1257
vpclmulqdq $0x11,%xmm3,%xmm13,%xmm4
1258
vpxor %ymm4,%ymm7,%ymm7
1259
jmp .Lghash_mul_one_vec_unreduced__func2
1260
1261
.Lxor_two_blocks__func2:
1262
vmovdqu (%rdi),%ymm2
1263
vpxor %ymm2,%ymm12,%ymm12
1264
vmovdqu %ymm12,(%rsi)
1265
vpshufb %ymm0,%ymm2,%ymm12
1266
vpxor %ymm1,%ymm12,%ymm12
1267
vmovdqu (%r8),%ymm2
1268
jmp .Lghash_mul_one_vec_unreduced__func2
1269
1270
.Lxor_one_block__func2:
1271
vmovdqu (%rdi),%xmm2
1272
vpxor %xmm2,%xmm12,%xmm12
1273
vmovdqu %xmm12,(%rsi)
1274
vpshufb %xmm0,%xmm2,%xmm12
1275
vpxor %xmm1,%xmm12,%xmm12
1276
vmovdqu (%r8),%xmm2
1277
1278
.Lghash_mul_one_vec_unreduced__func2:
1279
vpclmulqdq $0x00,%ymm2,%ymm12,%ymm4
1280
vpxor %ymm4,%ymm5,%ymm5
1281
vpclmulqdq $0x01,%ymm2,%ymm12,%ymm4
1282
vpxor %ymm4,%ymm6,%ymm6
1283
vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4
1284
vpxor %ymm4,%ymm6,%ymm6
1285
vpclmulqdq $0x11,%ymm2,%ymm12,%ymm4
1286
vpxor %ymm4,%ymm7,%ymm7
1287
1288
.Lreduce__func2:
1289
1290
vbroadcasti128 .Lgfpoly(%rip),%ymm2
1291
vpclmulqdq $0x01,%ymm5,%ymm2,%ymm3
1292
vpshufd $0x4e,%ymm5,%ymm5
1293
vpxor %ymm5,%ymm6,%ymm6
1294
vpxor %ymm3,%ymm6,%ymm6
1295
vpclmulqdq $0x01,%ymm6,%ymm2,%ymm3
1296
vpshufd $0x4e,%ymm6,%ymm6
1297
vpxor %ymm6,%ymm7,%ymm7
1298
vpxor %ymm3,%ymm7,%ymm7
1299
vextracti128 $1,%ymm7,%xmm1
1300
vpxor %xmm7,%xmm1,%xmm1
1301
1302
.Ldone__func2:
1303
1304
vpshufb %xmm0,%xmm1,%xmm1
1305
vmovdqu %xmm1,(%r12)
1306
1307
vzeroupper
1308
popq %r12
1309
.cfi_adjust_cfa_offset -8
1310
.cfi_restore %r12
1311
RET
1312
1313
.cfi_endproc
1314
SET_SIZE(aes_gcm_dec_update_vaes_avx2)
1315
1316
#endif /* !_WIN32 || _KERNEL */
1317
1318
/* Mark the stack non-executable. */
1319
#if defined(__linux__) && defined(__ELF__)
1320
.section .note.GNU-stack,"",%progbits
1321
#endif
1322
1323
#endif /* defined(__x86_64__) && defined(HAVE_AVX) && defined(HAVE_AES) ... */
1324
1325