Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/crypto/openssl/amd64/aesni-gcm-x86_64.S
39482 views
1
/* Do not modify. This file is auto-generated from aesni-gcm-x86_64.pl. */
2
.text
3
4
.type _aesni_ctr32_ghash_6x,@function
5
.align 32
6
_aesni_ctr32_ghash_6x:
7
.cfi_startproc
8
vmovdqu 32(%r11),%xmm2
9
subq $6,%rdx
10
vpxor %xmm4,%xmm4,%xmm4
11
vmovdqu 0-128(%rcx),%xmm15
12
vpaddb %xmm2,%xmm1,%xmm10
13
vpaddb %xmm2,%xmm10,%xmm11
14
vpaddb %xmm2,%xmm11,%xmm12
15
vpaddb %xmm2,%xmm12,%xmm13
16
vpaddb %xmm2,%xmm13,%xmm14
17
vpxor %xmm15,%xmm1,%xmm9
18
vmovdqu %xmm4,16+8(%rsp)
19
jmp .Loop6x
20
21
.align 32
22
.Loop6x:
23
addl $100663296,%ebx
24
jc .Lhandle_ctr32
25
vmovdqu 0-32(%r9),%xmm3
26
vpaddb %xmm2,%xmm14,%xmm1
27
vpxor %xmm15,%xmm10,%xmm10
28
vpxor %xmm15,%xmm11,%xmm11
29
30
.Lresume_ctr32:
31
vmovdqu %xmm1,(%r8)
32
vpclmulqdq $0x10,%xmm3,%xmm7,%xmm5
33
vpxor %xmm15,%xmm12,%xmm12
34
vmovups 16-128(%rcx),%xmm2
35
vpclmulqdq $0x01,%xmm3,%xmm7,%xmm6
36
xorq %r12,%r12
37
cmpq %r14,%r15
38
39
vaesenc %xmm2,%xmm9,%xmm9
40
vmovdqu 48+8(%rsp),%xmm0
41
vpxor %xmm15,%xmm13,%xmm13
42
vpclmulqdq $0x00,%xmm3,%xmm7,%xmm1
43
vaesenc %xmm2,%xmm10,%xmm10
44
vpxor %xmm15,%xmm14,%xmm14
45
setnc %r12b
46
vpclmulqdq $0x11,%xmm3,%xmm7,%xmm7
47
vaesenc %xmm2,%xmm11,%xmm11
48
vmovdqu 16-32(%r9),%xmm3
49
negq %r12
50
vaesenc %xmm2,%xmm12,%xmm12
51
vpxor %xmm5,%xmm6,%xmm6
52
vpclmulqdq $0x00,%xmm3,%xmm0,%xmm5
53
vpxor %xmm4,%xmm8,%xmm8
54
vaesenc %xmm2,%xmm13,%xmm13
55
vpxor %xmm5,%xmm1,%xmm4
56
andq $0x60,%r12
57
vmovups 32-128(%rcx),%xmm15
58
vpclmulqdq $0x10,%xmm3,%xmm0,%xmm1
59
vaesenc %xmm2,%xmm14,%xmm14
60
61
vpclmulqdq $0x01,%xmm3,%xmm0,%xmm2
62
leaq (%r14,%r12,1),%r14
63
vaesenc %xmm15,%xmm9,%xmm9
64
vpxor 16+8(%rsp),%xmm8,%xmm8
65
vpclmulqdq $0x11,%xmm3,%xmm0,%xmm3
66
vmovdqu 64+8(%rsp),%xmm0
67
vaesenc %xmm15,%xmm10,%xmm10
68
movbeq 88(%r14),%r13
69
vaesenc %xmm15,%xmm11,%xmm11
70
movbeq 80(%r14),%r12
71
vaesenc %xmm15,%xmm12,%xmm12
72
movq %r13,32+8(%rsp)
73
vaesenc %xmm15,%xmm13,%xmm13
74
movq %r12,40+8(%rsp)
75
vmovdqu 48-32(%r9),%xmm5
76
vaesenc %xmm15,%xmm14,%xmm14
77
78
vmovups 48-128(%rcx),%xmm15
79
vpxor %xmm1,%xmm6,%xmm6
80
vpclmulqdq $0x00,%xmm5,%xmm0,%xmm1
81
vaesenc %xmm15,%xmm9,%xmm9
82
vpxor %xmm2,%xmm6,%xmm6
83
vpclmulqdq $0x10,%xmm5,%xmm0,%xmm2
84
vaesenc %xmm15,%xmm10,%xmm10
85
vpxor %xmm3,%xmm7,%xmm7
86
vpclmulqdq $0x01,%xmm5,%xmm0,%xmm3
87
vaesenc %xmm15,%xmm11,%xmm11
88
vpclmulqdq $0x11,%xmm5,%xmm0,%xmm5
89
vmovdqu 80+8(%rsp),%xmm0
90
vaesenc %xmm15,%xmm12,%xmm12
91
vaesenc %xmm15,%xmm13,%xmm13
92
vpxor %xmm1,%xmm4,%xmm4
93
vmovdqu 64-32(%r9),%xmm1
94
vaesenc %xmm15,%xmm14,%xmm14
95
96
vmovups 64-128(%rcx),%xmm15
97
vpxor %xmm2,%xmm6,%xmm6
98
vpclmulqdq $0x00,%xmm1,%xmm0,%xmm2
99
vaesenc %xmm15,%xmm9,%xmm9
100
vpxor %xmm3,%xmm6,%xmm6
101
vpclmulqdq $0x10,%xmm1,%xmm0,%xmm3
102
vaesenc %xmm15,%xmm10,%xmm10
103
movbeq 72(%r14),%r13
104
vpxor %xmm5,%xmm7,%xmm7
105
vpclmulqdq $0x01,%xmm1,%xmm0,%xmm5
106
vaesenc %xmm15,%xmm11,%xmm11
107
movbeq 64(%r14),%r12
108
vpclmulqdq $0x11,%xmm1,%xmm0,%xmm1
109
vmovdqu 96+8(%rsp),%xmm0
110
vaesenc %xmm15,%xmm12,%xmm12
111
movq %r13,48+8(%rsp)
112
vaesenc %xmm15,%xmm13,%xmm13
113
movq %r12,56+8(%rsp)
114
vpxor %xmm2,%xmm4,%xmm4
115
vmovdqu 96-32(%r9),%xmm2
116
vaesenc %xmm15,%xmm14,%xmm14
117
118
vmovups 80-128(%rcx),%xmm15
119
vpxor %xmm3,%xmm6,%xmm6
120
vpclmulqdq $0x00,%xmm2,%xmm0,%xmm3
121
vaesenc %xmm15,%xmm9,%xmm9
122
vpxor %xmm5,%xmm6,%xmm6
123
vpclmulqdq $0x10,%xmm2,%xmm0,%xmm5
124
vaesenc %xmm15,%xmm10,%xmm10
125
movbeq 56(%r14),%r13
126
vpxor %xmm1,%xmm7,%xmm7
127
vpclmulqdq $0x01,%xmm2,%xmm0,%xmm1
128
vpxor 112+8(%rsp),%xmm8,%xmm8
129
vaesenc %xmm15,%xmm11,%xmm11
130
movbeq 48(%r14),%r12
131
vpclmulqdq $0x11,%xmm2,%xmm0,%xmm2
132
vaesenc %xmm15,%xmm12,%xmm12
133
movq %r13,64+8(%rsp)
134
vaesenc %xmm15,%xmm13,%xmm13
135
movq %r12,72+8(%rsp)
136
vpxor %xmm3,%xmm4,%xmm4
137
vmovdqu 112-32(%r9),%xmm3
138
vaesenc %xmm15,%xmm14,%xmm14
139
140
vmovups 96-128(%rcx),%xmm15
141
vpxor %xmm5,%xmm6,%xmm6
142
vpclmulqdq $0x10,%xmm3,%xmm8,%xmm5
143
vaesenc %xmm15,%xmm9,%xmm9
144
vpxor %xmm1,%xmm6,%xmm6
145
vpclmulqdq $0x01,%xmm3,%xmm8,%xmm1
146
vaesenc %xmm15,%xmm10,%xmm10
147
movbeq 40(%r14),%r13
148
vpxor %xmm2,%xmm7,%xmm7
149
vpclmulqdq $0x00,%xmm3,%xmm8,%xmm2
150
vaesenc %xmm15,%xmm11,%xmm11
151
movbeq 32(%r14),%r12
152
vpclmulqdq $0x11,%xmm3,%xmm8,%xmm8
153
vaesenc %xmm15,%xmm12,%xmm12
154
movq %r13,80+8(%rsp)
155
vaesenc %xmm15,%xmm13,%xmm13
156
movq %r12,88+8(%rsp)
157
vpxor %xmm5,%xmm6,%xmm6
158
vaesenc %xmm15,%xmm14,%xmm14
159
vpxor %xmm1,%xmm6,%xmm6
160
161
vmovups 112-128(%rcx),%xmm15
162
vpslldq $8,%xmm6,%xmm5
163
vpxor %xmm2,%xmm4,%xmm4
164
vmovdqu 16(%r11),%xmm3
165
166
vaesenc %xmm15,%xmm9,%xmm9
167
vpxor %xmm8,%xmm7,%xmm7
168
vaesenc %xmm15,%xmm10,%xmm10
169
vpxor %xmm5,%xmm4,%xmm4
170
movbeq 24(%r14),%r13
171
vaesenc %xmm15,%xmm11,%xmm11
172
movbeq 16(%r14),%r12
173
vpalignr $8,%xmm4,%xmm4,%xmm0
174
vpclmulqdq $0x10,%xmm3,%xmm4,%xmm4
175
movq %r13,96+8(%rsp)
176
vaesenc %xmm15,%xmm12,%xmm12
177
movq %r12,104+8(%rsp)
178
vaesenc %xmm15,%xmm13,%xmm13
179
vmovups 128-128(%rcx),%xmm1
180
vaesenc %xmm15,%xmm14,%xmm14
181
182
vaesenc %xmm1,%xmm9,%xmm9
183
vmovups 144-128(%rcx),%xmm15
184
vaesenc %xmm1,%xmm10,%xmm10
185
vpsrldq $8,%xmm6,%xmm6
186
vaesenc %xmm1,%xmm11,%xmm11
187
vpxor %xmm6,%xmm7,%xmm7
188
vaesenc %xmm1,%xmm12,%xmm12
189
vpxor %xmm0,%xmm4,%xmm4
190
movbeq 8(%r14),%r13
191
vaesenc %xmm1,%xmm13,%xmm13
192
movbeq 0(%r14),%r12
193
vaesenc %xmm1,%xmm14,%xmm14
194
vmovups 160-128(%rcx),%xmm1
195
cmpl $11,%ebp
196
jb .Lenc_tail
197
198
vaesenc %xmm15,%xmm9,%xmm9
199
vaesenc %xmm15,%xmm10,%xmm10
200
vaesenc %xmm15,%xmm11,%xmm11
201
vaesenc %xmm15,%xmm12,%xmm12
202
vaesenc %xmm15,%xmm13,%xmm13
203
vaesenc %xmm15,%xmm14,%xmm14
204
205
vaesenc %xmm1,%xmm9,%xmm9
206
vaesenc %xmm1,%xmm10,%xmm10
207
vaesenc %xmm1,%xmm11,%xmm11
208
vaesenc %xmm1,%xmm12,%xmm12
209
vaesenc %xmm1,%xmm13,%xmm13
210
vmovups 176-128(%rcx),%xmm15
211
vaesenc %xmm1,%xmm14,%xmm14
212
vmovups 192-128(%rcx),%xmm1
213
je .Lenc_tail
214
215
vaesenc %xmm15,%xmm9,%xmm9
216
vaesenc %xmm15,%xmm10,%xmm10
217
vaesenc %xmm15,%xmm11,%xmm11
218
vaesenc %xmm15,%xmm12,%xmm12
219
vaesenc %xmm15,%xmm13,%xmm13
220
vaesenc %xmm15,%xmm14,%xmm14
221
222
vaesenc %xmm1,%xmm9,%xmm9
223
vaesenc %xmm1,%xmm10,%xmm10
224
vaesenc %xmm1,%xmm11,%xmm11
225
vaesenc %xmm1,%xmm12,%xmm12
226
vaesenc %xmm1,%xmm13,%xmm13
227
vmovups 208-128(%rcx),%xmm15
228
vaesenc %xmm1,%xmm14,%xmm14
229
vmovups 224-128(%rcx),%xmm1
230
jmp .Lenc_tail
231
232
.align 32
233
.Lhandle_ctr32:
234
vmovdqu (%r11),%xmm0
235
vpshufb %xmm0,%xmm1,%xmm6
236
vmovdqu 48(%r11),%xmm5
237
vpaddd 64(%r11),%xmm6,%xmm10
238
vpaddd %xmm5,%xmm6,%xmm11
239
vmovdqu 0-32(%r9),%xmm3
240
vpaddd %xmm5,%xmm10,%xmm12
241
vpshufb %xmm0,%xmm10,%xmm10
242
vpaddd %xmm5,%xmm11,%xmm13
243
vpshufb %xmm0,%xmm11,%xmm11
244
vpxor %xmm15,%xmm10,%xmm10
245
vpaddd %xmm5,%xmm12,%xmm14
246
vpshufb %xmm0,%xmm12,%xmm12
247
vpxor %xmm15,%xmm11,%xmm11
248
vpaddd %xmm5,%xmm13,%xmm1
249
vpshufb %xmm0,%xmm13,%xmm13
250
vpshufb %xmm0,%xmm14,%xmm14
251
vpshufb %xmm0,%xmm1,%xmm1
252
jmp .Lresume_ctr32
253
254
.align 32
255
.Lenc_tail:
256
vaesenc %xmm15,%xmm9,%xmm9
257
vmovdqu %xmm7,16+8(%rsp)
258
vpalignr $8,%xmm4,%xmm4,%xmm8
259
vaesenc %xmm15,%xmm10,%xmm10
260
vpclmulqdq $0x10,%xmm3,%xmm4,%xmm4
261
vpxor 0(%rdi),%xmm1,%xmm2
262
vaesenc %xmm15,%xmm11,%xmm11
263
vpxor 16(%rdi),%xmm1,%xmm0
264
vaesenc %xmm15,%xmm12,%xmm12
265
vpxor 32(%rdi),%xmm1,%xmm5
266
vaesenc %xmm15,%xmm13,%xmm13
267
vpxor 48(%rdi),%xmm1,%xmm6
268
vaesenc %xmm15,%xmm14,%xmm14
269
vpxor 64(%rdi),%xmm1,%xmm7
270
vpxor 80(%rdi),%xmm1,%xmm3
271
vmovdqu (%r8),%xmm1
272
273
vaesenclast %xmm2,%xmm9,%xmm9
274
vmovdqu 32(%r11),%xmm2
275
vaesenclast %xmm0,%xmm10,%xmm10
276
vpaddb %xmm2,%xmm1,%xmm0
277
movq %r13,112+8(%rsp)
278
leaq 96(%rdi),%rdi
279
vaesenclast %xmm5,%xmm11,%xmm11
280
vpaddb %xmm2,%xmm0,%xmm5
281
movq %r12,120+8(%rsp)
282
leaq 96(%rsi),%rsi
283
vmovdqu 0-128(%rcx),%xmm15
284
vaesenclast %xmm6,%xmm12,%xmm12
285
vpaddb %xmm2,%xmm5,%xmm6
286
vaesenclast %xmm7,%xmm13,%xmm13
287
vpaddb %xmm2,%xmm6,%xmm7
288
vaesenclast %xmm3,%xmm14,%xmm14
289
vpaddb %xmm2,%xmm7,%xmm3
290
291
addq $0x60,%r10
292
subq $0x6,%rdx
293
jc .L6x_done
294
295
vmovups %xmm9,-96(%rsi)
296
vpxor %xmm15,%xmm1,%xmm9
297
vmovups %xmm10,-80(%rsi)
298
vmovdqa %xmm0,%xmm10
299
vmovups %xmm11,-64(%rsi)
300
vmovdqa %xmm5,%xmm11
301
vmovups %xmm12,-48(%rsi)
302
vmovdqa %xmm6,%xmm12
303
vmovups %xmm13,-32(%rsi)
304
vmovdqa %xmm7,%xmm13
305
vmovups %xmm14,-16(%rsi)
306
vmovdqa %xmm3,%xmm14
307
vmovdqu 32+8(%rsp),%xmm7
308
jmp .Loop6x
309
310
.L6x_done:
311
vpxor 16+8(%rsp),%xmm8,%xmm8
312
vpxor %xmm4,%xmm8,%xmm8
313
314
.byte 0xf3,0xc3
315
.cfi_endproc
316
.size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x
317
.globl aesni_gcm_decrypt
318
.type aesni_gcm_decrypt,@function
319
.align 32
320
aesni_gcm_decrypt:
321
.cfi_startproc
322
xorq %r10,%r10
323
cmpq $0x60,%rdx
324
jb .Lgcm_dec_abort
325
326
leaq (%rsp),%rax
327
.cfi_def_cfa_register %rax
328
pushq %rbx
329
.cfi_offset %rbx,-16
330
pushq %rbp
331
.cfi_offset %rbp,-24
332
pushq %r12
333
.cfi_offset %r12,-32
334
pushq %r13
335
.cfi_offset %r13,-40
336
pushq %r14
337
.cfi_offset %r14,-48
338
pushq %r15
339
.cfi_offset %r15,-56
340
vzeroupper
341
342
vmovdqu (%r8),%xmm1
343
addq $-128,%rsp
344
movl 12(%r8),%ebx
345
leaq .Lbswap_mask(%rip),%r11
346
leaq -128(%rcx),%r14
347
movq $0xf80,%r15
348
vmovdqu (%r9),%xmm8
349
andq $-128,%rsp
350
vmovdqu (%r11),%xmm0
351
leaq 128(%rcx),%rcx
352
leaq 32+32(%r9),%r9
353
movl 240-128(%rcx),%ebp
354
vpshufb %xmm0,%xmm8,%xmm8
355
356
andq %r15,%r14
357
andq %rsp,%r15
358
subq %r14,%r15
359
jc .Ldec_no_key_aliasing
360
cmpq $768,%r15
361
jnc .Ldec_no_key_aliasing
362
subq %r15,%rsp
363
.Ldec_no_key_aliasing:
364
365
vmovdqu 80(%rdi),%xmm7
366
leaq (%rdi),%r14
367
vmovdqu 64(%rdi),%xmm4
368
leaq -192(%rdi,%rdx,1),%r15
369
vmovdqu 48(%rdi),%xmm5
370
shrq $4,%rdx
371
xorq %r10,%r10
372
vmovdqu 32(%rdi),%xmm6
373
vpshufb %xmm0,%xmm7,%xmm7
374
vmovdqu 16(%rdi),%xmm2
375
vpshufb %xmm0,%xmm4,%xmm4
376
vmovdqu (%rdi),%xmm3
377
vpshufb %xmm0,%xmm5,%xmm5
378
vmovdqu %xmm4,48(%rsp)
379
vpshufb %xmm0,%xmm6,%xmm6
380
vmovdqu %xmm5,64(%rsp)
381
vpshufb %xmm0,%xmm2,%xmm2
382
vmovdqu %xmm6,80(%rsp)
383
vpshufb %xmm0,%xmm3,%xmm3
384
vmovdqu %xmm2,96(%rsp)
385
vmovdqu %xmm3,112(%rsp)
386
387
call _aesni_ctr32_ghash_6x
388
389
vmovups %xmm9,-96(%rsi)
390
vmovups %xmm10,-80(%rsi)
391
vmovups %xmm11,-64(%rsi)
392
vmovups %xmm12,-48(%rsi)
393
vmovups %xmm13,-32(%rsi)
394
vmovups %xmm14,-16(%rsi)
395
396
vpshufb (%r11),%xmm8,%xmm8
397
vmovdqu %xmm8,-64(%r9)
398
399
vzeroupper
400
movq -48(%rax),%r15
401
.cfi_restore %r15
402
movq -40(%rax),%r14
403
.cfi_restore %r14
404
movq -32(%rax),%r13
405
.cfi_restore %r13
406
movq -24(%rax),%r12
407
.cfi_restore %r12
408
movq -16(%rax),%rbp
409
.cfi_restore %rbp
410
movq -8(%rax),%rbx
411
.cfi_restore %rbx
412
leaq (%rax),%rsp
413
.cfi_def_cfa_register %rsp
414
.Lgcm_dec_abort:
415
movq %r10,%rax
416
.byte 0xf3,0xc3
417
.cfi_endproc
418
.size aesni_gcm_decrypt,.-aesni_gcm_decrypt
419
.type _aesni_ctr32_6x,@function
420
.align 32
421
_aesni_ctr32_6x:
422
.cfi_startproc
423
vmovdqu 0-128(%rcx),%xmm4
424
vmovdqu 32(%r11),%xmm2
425
leaq -1(%rbp),%r13
426
vmovups 16-128(%rcx),%xmm15
427
leaq 32-128(%rcx),%r12
428
vpxor %xmm4,%xmm1,%xmm9
429
addl $100663296,%ebx
430
jc .Lhandle_ctr32_2
431
vpaddb %xmm2,%xmm1,%xmm10
432
vpaddb %xmm2,%xmm10,%xmm11
433
vpxor %xmm4,%xmm10,%xmm10
434
vpaddb %xmm2,%xmm11,%xmm12
435
vpxor %xmm4,%xmm11,%xmm11
436
vpaddb %xmm2,%xmm12,%xmm13
437
vpxor %xmm4,%xmm12,%xmm12
438
vpaddb %xmm2,%xmm13,%xmm14
439
vpxor %xmm4,%xmm13,%xmm13
440
vpaddb %xmm2,%xmm14,%xmm1
441
vpxor %xmm4,%xmm14,%xmm14
442
jmp .Loop_ctr32
443
444
.align 16
445
.Loop_ctr32:
446
vaesenc %xmm15,%xmm9,%xmm9
447
vaesenc %xmm15,%xmm10,%xmm10
448
vaesenc %xmm15,%xmm11,%xmm11
449
vaesenc %xmm15,%xmm12,%xmm12
450
vaesenc %xmm15,%xmm13,%xmm13
451
vaesenc %xmm15,%xmm14,%xmm14
452
vmovups (%r12),%xmm15
453
leaq 16(%r12),%r12
454
decl %r13d
455
jnz .Loop_ctr32
456
457
vmovdqu (%r12),%xmm3
458
vaesenc %xmm15,%xmm9,%xmm9
459
vpxor 0(%rdi),%xmm3,%xmm4
460
vaesenc %xmm15,%xmm10,%xmm10
461
vpxor 16(%rdi),%xmm3,%xmm5
462
vaesenc %xmm15,%xmm11,%xmm11
463
vpxor 32(%rdi),%xmm3,%xmm6
464
vaesenc %xmm15,%xmm12,%xmm12
465
vpxor 48(%rdi),%xmm3,%xmm8
466
vaesenc %xmm15,%xmm13,%xmm13
467
vpxor 64(%rdi),%xmm3,%xmm2
468
vaesenc %xmm15,%xmm14,%xmm14
469
vpxor 80(%rdi),%xmm3,%xmm3
470
leaq 96(%rdi),%rdi
471
472
vaesenclast %xmm4,%xmm9,%xmm9
473
vaesenclast %xmm5,%xmm10,%xmm10
474
vaesenclast %xmm6,%xmm11,%xmm11
475
vaesenclast %xmm8,%xmm12,%xmm12
476
vaesenclast %xmm2,%xmm13,%xmm13
477
vaesenclast %xmm3,%xmm14,%xmm14
478
vmovups %xmm9,0(%rsi)
479
vmovups %xmm10,16(%rsi)
480
vmovups %xmm11,32(%rsi)
481
vmovups %xmm12,48(%rsi)
482
vmovups %xmm13,64(%rsi)
483
vmovups %xmm14,80(%rsi)
484
leaq 96(%rsi),%rsi
485
486
.byte 0xf3,0xc3
487
.align 32
488
.Lhandle_ctr32_2:
489
vpshufb %xmm0,%xmm1,%xmm6
490
vmovdqu 48(%r11),%xmm5
491
vpaddd 64(%r11),%xmm6,%xmm10
492
vpaddd %xmm5,%xmm6,%xmm11
493
vpaddd %xmm5,%xmm10,%xmm12
494
vpshufb %xmm0,%xmm10,%xmm10
495
vpaddd %xmm5,%xmm11,%xmm13
496
vpshufb %xmm0,%xmm11,%xmm11
497
vpxor %xmm4,%xmm10,%xmm10
498
vpaddd %xmm5,%xmm12,%xmm14
499
vpshufb %xmm0,%xmm12,%xmm12
500
vpxor %xmm4,%xmm11,%xmm11
501
vpaddd %xmm5,%xmm13,%xmm1
502
vpshufb %xmm0,%xmm13,%xmm13
503
vpxor %xmm4,%xmm12,%xmm12
504
vpshufb %xmm0,%xmm14,%xmm14
505
vpxor %xmm4,%xmm13,%xmm13
506
vpshufb %xmm0,%xmm1,%xmm1
507
vpxor %xmm4,%xmm14,%xmm14
508
jmp .Loop_ctr32
509
.cfi_endproc
510
.size _aesni_ctr32_6x,.-_aesni_ctr32_6x
511
512
.globl aesni_gcm_encrypt
513
.type aesni_gcm_encrypt,@function
514
.align 32
515
aesni_gcm_encrypt:
516
.cfi_startproc
517
xorq %r10,%r10
518
cmpq $288,%rdx
519
jb .Lgcm_enc_abort
520
521
leaq (%rsp),%rax
522
.cfi_def_cfa_register %rax
523
pushq %rbx
524
.cfi_offset %rbx,-16
525
pushq %rbp
526
.cfi_offset %rbp,-24
527
pushq %r12
528
.cfi_offset %r12,-32
529
pushq %r13
530
.cfi_offset %r13,-40
531
pushq %r14
532
.cfi_offset %r14,-48
533
pushq %r15
534
.cfi_offset %r15,-56
535
vzeroupper
536
537
vmovdqu (%r8),%xmm1
538
addq $-128,%rsp
539
movl 12(%r8),%ebx
540
leaq .Lbswap_mask(%rip),%r11
541
leaq -128(%rcx),%r14
542
movq $0xf80,%r15
543
leaq 128(%rcx),%rcx
544
vmovdqu (%r11),%xmm0
545
andq $-128,%rsp
546
movl 240-128(%rcx),%ebp
547
548
andq %r15,%r14
549
andq %rsp,%r15
550
subq %r14,%r15
551
jc .Lenc_no_key_aliasing
552
cmpq $768,%r15
553
jnc .Lenc_no_key_aliasing
554
subq %r15,%rsp
555
.Lenc_no_key_aliasing:
556
557
leaq (%rsi),%r14
558
leaq -192(%rsi,%rdx,1),%r15
559
shrq $4,%rdx
560
561
call _aesni_ctr32_6x
562
vpshufb %xmm0,%xmm9,%xmm8
563
vpshufb %xmm0,%xmm10,%xmm2
564
vmovdqu %xmm8,112(%rsp)
565
vpshufb %xmm0,%xmm11,%xmm4
566
vmovdqu %xmm2,96(%rsp)
567
vpshufb %xmm0,%xmm12,%xmm5
568
vmovdqu %xmm4,80(%rsp)
569
vpshufb %xmm0,%xmm13,%xmm6
570
vmovdqu %xmm5,64(%rsp)
571
vpshufb %xmm0,%xmm14,%xmm7
572
vmovdqu %xmm6,48(%rsp)
573
574
call _aesni_ctr32_6x
575
576
vmovdqu (%r9),%xmm8
577
leaq 32+32(%r9),%r9
578
subq $12,%rdx
579
movq $192,%r10
580
vpshufb %xmm0,%xmm8,%xmm8
581
582
call _aesni_ctr32_ghash_6x
583
vmovdqu 32(%rsp),%xmm7
584
vmovdqu (%r11),%xmm0
585
vmovdqu 0-32(%r9),%xmm3
586
vpunpckhqdq %xmm7,%xmm7,%xmm1
587
vmovdqu 32-32(%r9),%xmm15
588
vmovups %xmm9,-96(%rsi)
589
vpshufb %xmm0,%xmm9,%xmm9
590
vpxor %xmm7,%xmm1,%xmm1
591
vmovups %xmm10,-80(%rsi)
592
vpshufb %xmm0,%xmm10,%xmm10
593
vmovups %xmm11,-64(%rsi)
594
vpshufb %xmm0,%xmm11,%xmm11
595
vmovups %xmm12,-48(%rsi)
596
vpshufb %xmm0,%xmm12,%xmm12
597
vmovups %xmm13,-32(%rsi)
598
vpshufb %xmm0,%xmm13,%xmm13
599
vmovups %xmm14,-16(%rsi)
600
vpshufb %xmm0,%xmm14,%xmm14
601
vmovdqu %xmm9,16(%rsp)
602
vmovdqu 48(%rsp),%xmm6
603
vmovdqu 16-32(%r9),%xmm0
604
vpunpckhqdq %xmm6,%xmm6,%xmm2
605
vpclmulqdq $0x00,%xmm3,%xmm7,%xmm5
606
vpxor %xmm6,%xmm2,%xmm2
607
vpclmulqdq $0x11,%xmm3,%xmm7,%xmm7
608
vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1
609
610
vmovdqu 64(%rsp),%xmm9
611
vpclmulqdq $0x00,%xmm0,%xmm6,%xmm4
612
vmovdqu 48-32(%r9),%xmm3
613
vpxor %xmm5,%xmm4,%xmm4
614
vpunpckhqdq %xmm9,%xmm9,%xmm5
615
vpclmulqdq $0x11,%xmm0,%xmm6,%xmm6
616
vpxor %xmm9,%xmm5,%xmm5
617
vpxor %xmm7,%xmm6,%xmm6
618
vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2
619
vmovdqu 80-32(%r9),%xmm15
620
vpxor %xmm1,%xmm2,%xmm2
621
622
vmovdqu 80(%rsp),%xmm1
623
vpclmulqdq $0x00,%xmm3,%xmm9,%xmm7
624
vmovdqu 64-32(%r9),%xmm0
625
vpxor %xmm4,%xmm7,%xmm7
626
vpunpckhqdq %xmm1,%xmm1,%xmm4
627
vpclmulqdq $0x11,%xmm3,%xmm9,%xmm9
628
vpxor %xmm1,%xmm4,%xmm4
629
vpxor %xmm6,%xmm9,%xmm9
630
vpclmulqdq $0x00,%xmm15,%xmm5,%xmm5
631
vpxor %xmm2,%xmm5,%xmm5
632
633
vmovdqu 96(%rsp),%xmm2
634
vpclmulqdq $0x00,%xmm0,%xmm1,%xmm6
635
vmovdqu 96-32(%r9),%xmm3
636
vpxor %xmm7,%xmm6,%xmm6
637
vpunpckhqdq %xmm2,%xmm2,%xmm7
638
vpclmulqdq $0x11,%xmm0,%xmm1,%xmm1
639
vpxor %xmm2,%xmm7,%xmm7
640
vpxor %xmm9,%xmm1,%xmm1
641
vpclmulqdq $0x10,%xmm15,%xmm4,%xmm4
642
vmovdqu 128-32(%r9),%xmm15
643
vpxor %xmm5,%xmm4,%xmm4
644
645
vpxor 112(%rsp),%xmm8,%xmm8
646
vpclmulqdq $0x00,%xmm3,%xmm2,%xmm5
647
vmovdqu 112-32(%r9),%xmm0
648
vpunpckhqdq %xmm8,%xmm8,%xmm9
649
vpxor %xmm6,%xmm5,%xmm5
650
vpclmulqdq $0x11,%xmm3,%xmm2,%xmm2
651
vpxor %xmm8,%xmm9,%xmm9
652
vpxor %xmm1,%xmm2,%xmm2
653
vpclmulqdq $0x00,%xmm15,%xmm7,%xmm7
654
vpxor %xmm4,%xmm7,%xmm4
655
656
vpclmulqdq $0x00,%xmm0,%xmm8,%xmm6
657
vmovdqu 0-32(%r9),%xmm3
658
vpunpckhqdq %xmm14,%xmm14,%xmm1
659
vpclmulqdq $0x11,%xmm0,%xmm8,%xmm8
660
vpxor %xmm14,%xmm1,%xmm1
661
vpxor %xmm5,%xmm6,%xmm5
662
vpclmulqdq $0x10,%xmm15,%xmm9,%xmm9
663
vmovdqu 32-32(%r9),%xmm15
664
vpxor %xmm2,%xmm8,%xmm7
665
vpxor %xmm4,%xmm9,%xmm6
666
667
vmovdqu 16-32(%r9),%xmm0
668
vpxor %xmm5,%xmm7,%xmm9
669
vpclmulqdq $0x00,%xmm3,%xmm14,%xmm4
670
vpxor %xmm9,%xmm6,%xmm6
671
vpunpckhqdq %xmm13,%xmm13,%xmm2
672
vpclmulqdq $0x11,%xmm3,%xmm14,%xmm14
673
vpxor %xmm13,%xmm2,%xmm2
674
vpslldq $8,%xmm6,%xmm9
675
vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1
676
vpxor %xmm9,%xmm5,%xmm8
677
vpsrldq $8,%xmm6,%xmm6
678
vpxor %xmm6,%xmm7,%xmm7
679
680
vpclmulqdq $0x00,%xmm0,%xmm13,%xmm5
681
vmovdqu 48-32(%r9),%xmm3
682
vpxor %xmm4,%xmm5,%xmm5
683
vpunpckhqdq %xmm12,%xmm12,%xmm9
684
vpclmulqdq $0x11,%xmm0,%xmm13,%xmm13
685
vpxor %xmm12,%xmm9,%xmm9
686
vpxor %xmm14,%xmm13,%xmm13
687
vpalignr $8,%xmm8,%xmm8,%xmm14
688
vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2
689
vmovdqu 80-32(%r9),%xmm15
690
vpxor %xmm1,%xmm2,%xmm2
691
692
vpclmulqdq $0x00,%xmm3,%xmm12,%xmm4
693
vmovdqu 64-32(%r9),%xmm0
694
vpxor %xmm5,%xmm4,%xmm4
695
vpunpckhqdq %xmm11,%xmm11,%xmm1
696
vpclmulqdq $0x11,%xmm3,%xmm12,%xmm12
697
vpxor %xmm11,%xmm1,%xmm1
698
vpxor %xmm13,%xmm12,%xmm12
699
vxorps 16(%rsp),%xmm7,%xmm7
700
vpclmulqdq $0x00,%xmm15,%xmm9,%xmm9
701
vpxor %xmm2,%xmm9,%xmm9
702
703
vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8
704
vxorps %xmm14,%xmm8,%xmm8
705
706
vpclmulqdq $0x00,%xmm0,%xmm11,%xmm5
707
vmovdqu 96-32(%r9),%xmm3
708
vpxor %xmm4,%xmm5,%xmm5
709
vpunpckhqdq %xmm10,%xmm10,%xmm2
710
vpclmulqdq $0x11,%xmm0,%xmm11,%xmm11
711
vpxor %xmm10,%xmm2,%xmm2
712
vpalignr $8,%xmm8,%xmm8,%xmm14
713
vpxor %xmm12,%xmm11,%xmm11
714
vpclmulqdq $0x10,%xmm15,%xmm1,%xmm1
715
vmovdqu 128-32(%r9),%xmm15
716
vpxor %xmm9,%xmm1,%xmm1
717
718
vxorps %xmm7,%xmm14,%xmm14
719
vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8
720
vxorps %xmm14,%xmm8,%xmm8
721
722
vpclmulqdq $0x00,%xmm3,%xmm10,%xmm4
723
vmovdqu 112-32(%r9),%xmm0
724
vpxor %xmm5,%xmm4,%xmm4
725
vpunpckhqdq %xmm8,%xmm8,%xmm9
726
vpclmulqdq $0x11,%xmm3,%xmm10,%xmm10
727
vpxor %xmm8,%xmm9,%xmm9
728
vpxor %xmm11,%xmm10,%xmm10
729
vpclmulqdq $0x00,%xmm15,%xmm2,%xmm2
730
vpxor %xmm1,%xmm2,%xmm2
731
732
vpclmulqdq $0x00,%xmm0,%xmm8,%xmm5
733
vpclmulqdq $0x11,%xmm0,%xmm8,%xmm7
734
vpxor %xmm4,%xmm5,%xmm5
735
vpclmulqdq $0x10,%xmm15,%xmm9,%xmm6
736
vpxor %xmm10,%xmm7,%xmm7
737
vpxor %xmm2,%xmm6,%xmm6
738
739
vpxor %xmm5,%xmm7,%xmm4
740
vpxor %xmm4,%xmm6,%xmm6
741
vpslldq $8,%xmm6,%xmm1
742
vmovdqu 16(%r11),%xmm3
743
vpsrldq $8,%xmm6,%xmm6
744
vpxor %xmm1,%xmm5,%xmm8
745
vpxor %xmm6,%xmm7,%xmm7
746
747
vpalignr $8,%xmm8,%xmm8,%xmm2
748
vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8
749
vpxor %xmm2,%xmm8,%xmm8
750
751
vpalignr $8,%xmm8,%xmm8,%xmm2
752
vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8
753
vpxor %xmm7,%xmm2,%xmm2
754
vpxor %xmm2,%xmm8,%xmm8
755
vpshufb (%r11),%xmm8,%xmm8
756
vmovdqu %xmm8,-64(%r9)
757
758
vzeroupper
759
movq -48(%rax),%r15
760
.cfi_restore %r15
761
movq -40(%rax),%r14
762
.cfi_restore %r14
763
movq -32(%rax),%r13
764
.cfi_restore %r13
765
movq -24(%rax),%r12
766
.cfi_restore %r12
767
movq -16(%rax),%rbp
768
.cfi_restore %rbp
769
movq -8(%rax),%rbx
770
.cfi_restore %rbx
771
leaq (%rax),%rsp
772
.cfi_def_cfa_register %rsp
773
.Lgcm_enc_abort:
774
movq %r10,%rax
775
.byte 0xf3,0xc3
776
.cfi_endproc
777
.size aesni_gcm_encrypt,.-aesni_gcm_encrypt
778
.section .rodata
779
.align 64
780
.Lbswap_mask:
781
.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
782
.Lpoly:
783
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
784
.Lone_msb:
785
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
786
.Ltwo_lsb:
787
.byte 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
788
.Lone_lsb:
789
.byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
790
.byte 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
791
.previous
792
.align 64
793
.section ".note.gnu.property", "a"
794
.p2align 3
795
.long 1f - 0f
796
.long 4f - 1f
797
.long 5
798
0:
799
# "GNU" encoded with .byte, since .asciz isn't supported
800
# on Solaris.
801
.byte 0x47
802
.byte 0x4e
803
.byte 0x55
804
.byte 0
805
1:
806
.p2align 3
807
.long 0xc0000002
808
.long 3f - 2f
809
2:
810
.long 3
811
3:
812
.p2align 3
813
4:
814
815