1# This file is generated from a similarly-named Perl script in the BoringSSL
2# source tree. Do not edit by hand.
3
4#if defined(__has_feature)
5#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
6#define OPENSSL_NO_ASM
7#endif
8#endif
9
10#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
11#if defined(BORINGSSL_PREFIX)
12#include <boringssl_prefix_symbols_asm.h>
13#endif
14.data
15
16.align 16
17one:
18.quad 1,0
19two:
20.quad 2,0
21three:
22.quad 3,0
23four:
24.quad 4,0
25five:
26.quad 5,0
27six:
28.quad 6,0
29seven:
30.quad 7,0
31eight:
32.quad 8,0
33
34OR_MASK:
35.long 0x00000000,0x00000000,0x00000000,0x80000000
36poly:
37.quad 0x1, 0xc200000000000000
38mask:
39.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
40con1:
41.long 1,1,1,1
42con2:
43.long 0x1b,0x1b,0x1b,0x1b
44con3:
45.byte -1,-1,-1,-1,-1,-1,-1,-1,4,5,6,7,4,5,6,7
46and_mask:
47.long 0,0xffffffff, 0xffffffff, 0xffffffff
48.text
49.type GFMUL,@function
50.align 16
51GFMUL:
52.cfi_startproc
53 vpclmulqdq $0x00,%xmm1,%xmm0,%xmm2
54 vpclmulqdq $0x11,%xmm1,%xmm0,%xmm5
55 vpclmulqdq $0x10,%xmm1,%xmm0,%xmm3
56 vpclmulqdq $0x01,%xmm1,%xmm0,%xmm4
57 vpxor %xmm4,%xmm3,%xmm3
58 vpslldq $8,%xmm3,%xmm4
59 vpsrldq $8,%xmm3,%xmm3
60 vpxor %xmm4,%xmm2,%xmm2
61 vpxor %xmm3,%xmm5,%xmm5
62
63 vpclmulqdq $0x10,poly(%rip),%xmm2,%xmm3
64 vpshufd $78,%xmm2,%xmm4
65 vpxor %xmm4,%xmm3,%xmm2
66
67 vpclmulqdq $0x10,poly(%rip),%xmm2,%xmm3
68 vpshufd $78,%xmm2,%xmm4
69 vpxor %xmm4,%xmm3,%xmm2
70
71 vpxor %xmm5,%xmm2,%xmm0
72 .byte 0xf3,0xc3
73.cfi_endproc
74.size GFMUL, .-GFMUL
75.globl aesgcmsiv_htable_init
76.hidden aesgcmsiv_htable_init
77.type aesgcmsiv_htable_init,@function
78.align 16
79aesgcmsiv_htable_init:
80.cfi_startproc
81 vmovdqa (%rsi),%xmm0
82 vmovdqa %xmm0,%xmm1
83 vmovdqa %xmm0,(%rdi)
84 call GFMUL
85 vmovdqa %xmm0,16(%rdi)
86 call GFMUL
87 vmovdqa %xmm0,32(%rdi)
88 call GFMUL
89 vmovdqa %xmm0,48(%rdi)
90 call GFMUL
91 vmovdqa %xmm0,64(%rdi)
92 call GFMUL
93 vmovdqa %xmm0,80(%rdi)
94 call GFMUL
95 vmovdqa %xmm0,96(%rdi)
96 call GFMUL
97 vmovdqa %xmm0,112(%rdi)
98 .byte 0xf3,0xc3
99.cfi_endproc
100.size aesgcmsiv_htable_init, .-aesgcmsiv_htable_init
101.globl aesgcmsiv_htable6_init
102.hidden aesgcmsiv_htable6_init
103.type aesgcmsiv_htable6_init,@function
104.align 16
105aesgcmsiv_htable6_init:
106.cfi_startproc
107 vmovdqa (%rsi),%xmm0
108 vmovdqa %xmm0,%xmm1
109 vmovdqa %xmm0,(%rdi)
110 call GFMUL
111 vmovdqa %xmm0,16(%rdi)
112 call GFMUL
113 vmovdqa %xmm0,32(%rdi)
114 call GFMUL
115 vmovdqa %xmm0,48(%rdi)
116 call GFMUL
117 vmovdqa %xmm0,64(%rdi)
118 call GFMUL
119 vmovdqa %xmm0,80(%rdi)
120 .byte 0xf3,0xc3
121.cfi_endproc
122.size aesgcmsiv_htable6_init, .-aesgcmsiv_htable6_init
123.globl aesgcmsiv_htable_polyval
124.hidden aesgcmsiv_htable_polyval
125.type aesgcmsiv_htable_polyval,@function
126.align 16
127aesgcmsiv_htable_polyval:
128.cfi_startproc
129 testq %rdx,%rdx
130 jnz .Lhtable_polyval_start
131 .byte 0xf3,0xc3
132
133.Lhtable_polyval_start:
134 vzeroall
135
136
137
138 movq %rdx,%r11
139 andq $127,%r11
140
141 jz .Lhtable_polyval_no_prefix
142
143 vpxor %xmm9,%xmm9,%xmm9
144 vmovdqa (%rcx),%xmm1
145 subq %r11,%rdx
146
147 subq $16,%r11
148
149
150 vmovdqu (%rsi),%xmm0
151 vpxor %xmm1,%xmm0,%xmm0
152
153 vpclmulqdq $0x01,(%rdi,%r11,1),%xmm0,%xmm5
154 vpclmulqdq $0x00,(%rdi,%r11,1),%xmm0,%xmm3
155 vpclmulqdq $0x11,(%rdi,%r11,1),%xmm0,%xmm4
156 vpclmulqdq $0x10,(%rdi,%r11,1),%xmm0,%xmm6
157 vpxor %xmm6,%xmm5,%xmm5
158
159 leaq 16(%rsi),%rsi
160 testq %r11,%r11
161 jnz .Lhtable_polyval_prefix_loop
162 jmp .Lhtable_polyval_prefix_complete
163
164
165.align 64
166.Lhtable_polyval_prefix_loop:
167 subq $16,%r11
168
169 vmovdqu (%rsi),%xmm0
170
171 vpclmulqdq $0x00,(%rdi,%r11,1),%xmm0,%xmm6
172 vpxor %xmm6,%xmm3,%xmm3
173 vpclmulqdq $0x11,(%rdi,%r11,1),%xmm0,%xmm6
174 vpxor %xmm6,%xmm4,%xmm4
175 vpclmulqdq $0x01,(%rdi,%r11,1),%xmm0,%xmm6
176 vpxor %xmm6,%xmm5,%xmm5
177 vpclmulqdq $0x10,(%rdi,%r11,1),%xmm0,%xmm6
178 vpxor %xmm6,%xmm5,%xmm5
179
180 testq %r11,%r11
181
182 leaq 16(%rsi),%rsi
183
184 jnz .Lhtable_polyval_prefix_loop
185
186.Lhtable_polyval_prefix_complete:
187 vpsrldq $8,%xmm5,%xmm6
188 vpslldq $8,%xmm5,%xmm5
189
190 vpxor %xmm6,%xmm4,%xmm9
191 vpxor %xmm5,%xmm3,%xmm1
192
193 jmp .Lhtable_polyval_main_loop
194
195.Lhtable_polyval_no_prefix:
196
197
198
199
200 vpxor %xmm1,%xmm1,%xmm1
201 vmovdqa (%rcx),%xmm9
202
203.align 64
204.Lhtable_polyval_main_loop:
205 subq $0x80,%rdx
206 jb .Lhtable_polyval_out
207
208 vmovdqu 112(%rsi),%xmm0
209
210 vpclmulqdq $0x01,(%rdi),%xmm0,%xmm5
211 vpclmulqdq $0x00,(%rdi),%xmm0,%xmm3
212 vpclmulqdq $0x11,(%rdi),%xmm0,%xmm4
213 vpclmulqdq $0x10,(%rdi),%xmm0,%xmm6
214 vpxor %xmm6,%xmm5,%xmm5
215
216
217 vmovdqu 96(%rsi),%xmm0
218 vpclmulqdq $0x01,16(%rdi),%xmm0,%xmm6
219 vpxor %xmm6,%xmm5,%xmm5
220 vpclmulqdq $0x00,16(%rdi),%xmm0,%xmm6
221 vpxor %xmm6,%xmm3,%xmm3
222 vpclmulqdq $0x11,16(%rdi),%xmm0,%xmm6
223 vpxor %xmm6,%xmm4,%xmm4
224 vpclmulqdq $0x10,16(%rdi),%xmm0,%xmm6
225 vpxor %xmm6,%xmm5,%xmm5
226
227
228
229 vmovdqu 80(%rsi),%xmm0
230
231 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm7
232 vpalignr $8,%xmm1,%xmm1,%xmm1
233
234 vpclmulqdq $0x01,32(%rdi),%xmm0,%xmm6
235 vpxor %xmm6,%xmm5,%xmm5
236 vpclmulqdq $0x00,32(%rdi),%xmm0,%xmm6
237 vpxor %xmm6,%xmm3,%xmm3
238 vpclmulqdq $0x11,32(%rdi),%xmm0,%xmm6
239 vpxor %xmm6,%xmm4,%xmm4
240 vpclmulqdq $0x10,32(%rdi),%xmm0,%xmm6
241 vpxor %xmm6,%xmm5,%xmm5
242
243
244 vpxor %xmm7,%xmm1,%xmm1
245
246 vmovdqu 64(%rsi),%xmm0
247
248 vpclmulqdq $0x01,48(%rdi),%xmm0,%xmm6
249 vpxor %xmm6,%xmm5,%xmm5
250 vpclmulqdq $0x00,48(%rdi),%xmm0,%xmm6
251 vpxor %xmm6,%xmm3,%xmm3
252 vpclmulqdq $0x11,48(%rdi),%xmm0,%xmm6
253 vpxor %xmm6,%xmm4,%xmm4
254 vpclmulqdq $0x10,48(%rdi),%xmm0,%xmm6
255 vpxor %xmm6,%xmm5,%xmm5
256
257
258 vmovdqu 48(%rsi),%xmm0
259
260 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm7
261 vpalignr $8,%xmm1,%xmm1,%xmm1
262
263 vpclmulqdq $0x01,64(%rdi),%xmm0,%xmm6
264 vpxor %xmm6,%xmm5,%xmm5
265 vpclmulqdq $0x00,64(%rdi),%xmm0,%xmm6
266 vpxor %xmm6,%xmm3,%xmm3
267 vpclmulqdq $0x11,64(%rdi),%xmm0,%xmm6
268 vpxor %xmm6,%xmm4,%xmm4
269 vpclmulqdq $0x10,64(%rdi),%xmm0,%xmm6
270 vpxor %xmm6,%xmm5,%xmm5
271
272
273 vpxor %xmm7,%xmm1,%xmm1
274
275 vmovdqu 32(%rsi),%xmm0
276
277 vpclmulqdq $0x01,80(%rdi),%xmm0,%xmm6
278 vpxor %xmm6,%xmm5,%xmm5
279 vpclmulqdq $0x00,80(%rdi),%xmm0,%xmm6
280 vpxor %xmm6,%xmm3,%xmm3
281 vpclmulqdq $0x11,80(%rdi),%xmm0,%xmm6
282 vpxor %xmm6,%xmm4,%xmm4
283 vpclmulqdq $0x10,80(%rdi),%xmm0,%xmm6
284 vpxor %xmm6,%xmm5,%xmm5
285
286
287 vpxor %xmm9,%xmm1,%xmm1
288
289 vmovdqu 16(%rsi),%xmm0
290
291 vpclmulqdq $0x01,96(%rdi),%xmm0,%xmm6
292 vpxor %xmm6,%xmm5,%xmm5
293 vpclmulqdq $0x00,96(%rdi),%xmm0,%xmm6
294 vpxor %xmm6,%xmm3,%xmm3
295 vpclmulqdq $0x11,96(%rdi),%xmm0,%xmm6
296 vpxor %xmm6,%xmm4,%xmm4
297 vpclmulqdq $0x10,96(%rdi),%xmm0,%xmm6
298 vpxor %xmm6,%xmm5,%xmm5
299
300
301 vmovdqu 0(%rsi),%xmm0
302 vpxor %xmm1,%xmm0,%xmm0
303
304 vpclmulqdq $0x01,112(%rdi),%xmm0,%xmm6
305 vpxor %xmm6,%xmm5,%xmm5
306 vpclmulqdq $0x00,112(%rdi),%xmm0,%xmm6
307 vpxor %xmm6,%xmm3,%xmm3
308 vpclmulqdq $0x11,112(%rdi),%xmm0,%xmm6
309 vpxor %xmm6,%xmm4,%xmm4
310 vpclmulqdq $0x10,112(%rdi),%xmm0,%xmm6
311 vpxor %xmm6,%xmm5,%xmm5
312
313
314 vpsrldq $8,%xmm5,%xmm6
315 vpslldq $8,%xmm5,%xmm5
316
317 vpxor %xmm6,%xmm4,%xmm9
318 vpxor %xmm5,%xmm3,%xmm1
319
320 leaq 128(%rsi),%rsi
321 jmp .Lhtable_polyval_main_loop
322
323
324
325.Lhtable_polyval_out:
326 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm6
327 vpalignr $8,%xmm1,%xmm1,%xmm1
328 vpxor %xmm6,%xmm1,%xmm1
329
330 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm6
331 vpalignr $8,%xmm1,%xmm1,%xmm1
332 vpxor %xmm6,%xmm1,%xmm1
333 vpxor %xmm9,%xmm1,%xmm1
334
335 vmovdqu %xmm1,(%rcx)
336 vzeroupper
337 .byte 0xf3,0xc3
338.cfi_endproc
339.size aesgcmsiv_htable_polyval,.-aesgcmsiv_htable_polyval
340.globl aesgcmsiv_polyval_horner
341.hidden aesgcmsiv_polyval_horner
342.type aesgcmsiv_polyval_horner,@function
343.align 16
344aesgcmsiv_polyval_horner:
345.cfi_startproc
346 testq %rcx,%rcx
347 jnz .Lpolyval_horner_start
348 .byte 0xf3,0xc3
349
350.Lpolyval_horner_start:
351
352
353
354 xorq %r10,%r10
355 shlq $4,%rcx
356
357 vmovdqa (%rsi),%xmm1
358 vmovdqa (%rdi),%xmm0
359
360.Lpolyval_horner_loop:
361 vpxor (%rdx,%r10,1),%xmm0,%xmm0
362 call GFMUL
363
364 addq $16,%r10
365 cmpq %r10,%rcx
366 jne .Lpolyval_horner_loop
367
368
369 vmovdqa %xmm0,(%rdi)
370 .byte 0xf3,0xc3
371.cfi_endproc
372.size aesgcmsiv_polyval_horner,.-aesgcmsiv_polyval_horner
373.globl aes128gcmsiv_aes_ks
374.hidden aes128gcmsiv_aes_ks
375.type aes128gcmsiv_aes_ks,@function
376.align 16
377aes128gcmsiv_aes_ks:
378.cfi_startproc
379 vmovdqu (%rdi),%xmm1
380 vmovdqa %xmm1,(%rsi)
381
382 vmovdqa con1(%rip),%xmm0
383 vmovdqa mask(%rip),%xmm15
384
385 movq $8,%rax
386
387.Lks128_loop:
388 addq $16,%rsi
389 subq $1,%rax
390 vpshufb %xmm15,%xmm1,%xmm2
391 vaesenclast %xmm0,%xmm2,%xmm2
392 vpslld $1,%xmm0,%xmm0
393 vpslldq $4,%xmm1,%xmm3
394 vpxor %xmm3,%xmm1,%xmm1
395 vpslldq $4,%xmm3,%xmm3
396 vpxor %xmm3,%xmm1,%xmm1
397 vpslldq $4,%xmm3,%xmm3
398 vpxor %xmm3,%xmm1,%xmm1
399 vpxor %xmm2,%xmm1,%xmm1
400 vmovdqa %xmm1,(%rsi)
401 jne .Lks128_loop
402
403 vmovdqa con2(%rip),%xmm0
404 vpshufb %xmm15,%xmm1,%xmm2
405 vaesenclast %xmm0,%xmm2,%xmm2
406 vpslld $1,%xmm0,%xmm0
407 vpslldq $4,%xmm1,%xmm3
408 vpxor %xmm3,%xmm1,%xmm1
409 vpslldq $4,%xmm3,%xmm3
410 vpxor %xmm3,%xmm1,%xmm1
411 vpslldq $4,%xmm3,%xmm3
412 vpxor %xmm3,%xmm1,%xmm1
413 vpxor %xmm2,%xmm1,%xmm1
414 vmovdqa %xmm1,16(%rsi)
415
416 vpshufb %xmm15,%xmm1,%xmm2
417 vaesenclast %xmm0,%xmm2,%xmm2
418 vpslldq $4,%xmm1,%xmm3
419 vpxor %xmm3,%xmm1,%xmm1
420 vpslldq $4,%xmm3,%xmm3
421 vpxor %xmm3,%xmm1,%xmm1
422 vpslldq $4,%xmm3,%xmm3
423 vpxor %xmm3,%xmm1,%xmm1
424 vpxor %xmm2,%xmm1,%xmm1
425 vmovdqa %xmm1,32(%rsi)
426 .byte 0xf3,0xc3
427.cfi_endproc
428.size aes128gcmsiv_aes_ks,.-aes128gcmsiv_aes_ks
429.globl aes256gcmsiv_aes_ks
430.hidden aes256gcmsiv_aes_ks
431.type aes256gcmsiv_aes_ks,@function
432.align 16
433aes256gcmsiv_aes_ks:
434.cfi_startproc
435 vmovdqu (%rdi),%xmm1
436 vmovdqu 16(%rdi),%xmm3
437 vmovdqa %xmm1,(%rsi)
438 vmovdqa %xmm3,16(%rsi)
439 vmovdqa con1(%rip),%xmm0
440 vmovdqa mask(%rip),%xmm15
441 vpxor %xmm14,%xmm14,%xmm14
442 movq $6,%rax
443
444.Lks256_loop:
445 addq $32,%rsi
446 subq $1,%rax
447 vpshufb %xmm15,%xmm3,%xmm2
448 vaesenclast %xmm0,%xmm2,%xmm2
449 vpslld $1,%xmm0,%xmm0
450 vpsllq $32,%xmm1,%xmm4
451 vpxor %xmm4,%xmm1,%xmm1
452 vpshufb con3(%rip),%xmm1,%xmm4
453 vpxor %xmm4,%xmm1,%xmm1
454 vpxor %xmm2,%xmm1,%xmm1
455 vmovdqa %xmm1,(%rsi)
456 vpshufd $0xff,%xmm1,%xmm2
457 vaesenclast %xmm14,%xmm2,%xmm2
458 vpsllq $32,%xmm3,%xmm4
459 vpxor %xmm4,%xmm3,%xmm3
460 vpshufb con3(%rip),%xmm3,%xmm4
461 vpxor %xmm4,%xmm3,%xmm3
462 vpxor %xmm2,%xmm3,%xmm3
463 vmovdqa %xmm3,16(%rsi)
464 jne .Lks256_loop
465
466 vpshufb %xmm15,%xmm3,%xmm2
467 vaesenclast %xmm0,%xmm2,%xmm2
468 vpsllq $32,%xmm1,%xmm4
469 vpxor %xmm4,%xmm1,%xmm1
470 vpshufb con3(%rip),%xmm1,%xmm4
471 vpxor %xmm4,%xmm1,%xmm1
472 vpxor %xmm2,%xmm1,%xmm1
473 vmovdqa %xmm1,32(%rsi)
474 .byte 0xf3,0xc3
475.cfi_endproc
476.globl aes128gcmsiv_aes_ks_enc_x1
477.hidden aes128gcmsiv_aes_ks_enc_x1
478.type aes128gcmsiv_aes_ks_enc_x1,@function
479.align 16
480aes128gcmsiv_aes_ks_enc_x1:
481.cfi_startproc
482 vmovdqa (%rcx),%xmm1
483 vmovdqa 0(%rdi),%xmm4
484
485 vmovdqa %xmm1,(%rdx)
486 vpxor %xmm1,%xmm4,%xmm4
487
488 vmovdqa con1(%rip),%xmm0
489 vmovdqa mask(%rip),%xmm15
490
491 vpshufb %xmm15,%xmm1,%xmm2
492 vaesenclast %xmm0,%xmm2,%xmm2
493 vpslld $1,%xmm0,%xmm0
494 vpsllq $32,%xmm1,%xmm3
495 vpxor %xmm3,%xmm1,%xmm1
496 vpshufb con3(%rip),%xmm1,%xmm3
497 vpxor %xmm3,%xmm1,%xmm1
498 vpxor %xmm2,%xmm1,%xmm1
499
500 vaesenc %xmm1,%xmm4,%xmm4
501 vmovdqa %xmm1,16(%rdx)
502
503 vpshufb %xmm15,%xmm1,%xmm2
504 vaesenclast %xmm0,%xmm2,%xmm2
505 vpslld $1,%xmm0,%xmm0
506 vpsllq $32,%xmm1,%xmm3
507 vpxor %xmm3,%xmm1,%xmm1
508 vpshufb con3(%rip),%xmm1,%xmm3
509 vpxor %xmm3,%xmm1,%xmm1
510 vpxor %xmm2,%xmm1,%xmm1
511
512 vaesenc %xmm1,%xmm4,%xmm4
513 vmovdqa %xmm1,32(%rdx)
514
515 vpshufb %xmm15,%xmm1,%xmm2
516 vaesenclast %xmm0,%xmm2,%xmm2
517 vpslld $1,%xmm0,%xmm0
518 vpsllq $32,%xmm1,%xmm3
519 vpxor %xmm3,%xmm1,%xmm1
520 vpshufb con3(%rip),%xmm1,%xmm3
521 vpxor %xmm3,%xmm1,%xmm1
522 vpxor %xmm2,%xmm1,%xmm1
523
524 vaesenc %xmm1,%xmm4,%xmm4
525 vmovdqa %xmm1,48(%rdx)
526
527 vpshufb %xmm15,%xmm1,%xmm2
528 vaesenclast %xmm0,%xmm2,%xmm2
529 vpslld $1,%xmm0,%xmm0
530 vpsllq $32,%xmm1,%xmm3
531 vpxor %xmm3,%xmm1,%xmm1
532 vpshufb con3(%rip),%xmm1,%xmm3
533 vpxor %xmm3,%xmm1,%xmm1
534 vpxor %xmm2,%xmm1,%xmm1
535
536 vaesenc %xmm1,%xmm4,%xmm4
537 vmovdqa %xmm1,64(%rdx)
538
539 vpshufb %xmm15,%xmm1,%xmm2
540 vaesenclast %xmm0,%xmm2,%xmm2
541 vpslld $1,%xmm0,%xmm0
542 vpsllq $32,%xmm1,%xmm3
543 vpxor %xmm3,%xmm1,%xmm1
544 vpshufb con3(%rip),%xmm1,%xmm3
545 vpxor %xmm3,%xmm1,%xmm1
546 vpxor %xmm2,%xmm1,%xmm1
547
548 vaesenc %xmm1,%xmm4,%xmm4
549 vmovdqa %xmm1,80(%rdx)
550
551 vpshufb %xmm15,%xmm1,%xmm2
552 vaesenclast %xmm0,%xmm2,%xmm2
553 vpslld $1,%xmm0,%xmm0
554 vpsllq $32,%xmm1,%xmm3
555 vpxor %xmm3,%xmm1,%xmm1
556 vpshufb con3(%rip),%xmm1,%xmm3
557 vpxor %xmm3,%xmm1,%xmm1
558 vpxor %xmm2,%xmm1,%xmm1
559
560 vaesenc %xmm1,%xmm4,%xmm4
561 vmovdqa %xmm1,96(%rdx)
562
563 vpshufb %xmm15,%xmm1,%xmm2
564 vaesenclast %xmm0,%xmm2,%xmm2
565 vpslld $1,%xmm0,%xmm0
566 vpsllq $32,%xmm1,%xmm3
567 vpxor %xmm3,%xmm1,%xmm1
568 vpshufb con3(%rip),%xmm1,%xmm3
569 vpxor %xmm3,%xmm1,%xmm1
570 vpxor %xmm2,%xmm1,%xmm1
571
572 vaesenc %xmm1,%xmm4,%xmm4
573 vmovdqa %xmm1,112(%rdx)
574
575 vpshufb %xmm15,%xmm1,%xmm2
576 vaesenclast %xmm0,%xmm2,%xmm2
577 vpslld $1,%xmm0,%xmm0
578 vpsllq $32,%xmm1,%xmm3
579 vpxor %xmm3,%xmm1,%xmm1
580 vpshufb con3(%rip),%xmm1,%xmm3
581 vpxor %xmm3,%xmm1,%xmm1
582 vpxor %xmm2,%xmm1,%xmm1
583
584 vaesenc %xmm1,%xmm4,%xmm4
585 vmovdqa %xmm1,128(%rdx)
586
587
588 vmovdqa con2(%rip),%xmm0
589
590 vpshufb %xmm15,%xmm1,%xmm2
591 vaesenclast %xmm0,%xmm2,%xmm2
592 vpslld $1,%xmm0,%xmm0
593 vpsllq $32,%xmm1,%xmm3
594 vpxor %xmm3,%xmm1,%xmm1
595 vpshufb con3(%rip),%xmm1,%xmm3
596 vpxor %xmm3,%xmm1,%xmm1
597 vpxor %xmm2,%xmm1,%xmm1
598
599 vaesenc %xmm1,%xmm4,%xmm4
600 vmovdqa %xmm1,144(%rdx)
601
602 vpshufb %xmm15,%xmm1,%xmm2
603 vaesenclast %xmm0,%xmm2,%xmm2
604 vpsllq $32,%xmm1,%xmm3
605 vpxor %xmm3,%xmm1,%xmm1
606 vpshufb con3(%rip),%xmm1,%xmm3
607 vpxor %xmm3,%xmm1,%xmm1
608 vpxor %xmm2,%xmm1,%xmm1
609
610 vaesenclast %xmm1,%xmm4,%xmm4
611 vmovdqa %xmm1,160(%rdx)
612
613
614 vmovdqa %xmm4,0(%rsi)
615 .byte 0xf3,0xc3
616.cfi_endproc
617.size aes128gcmsiv_aes_ks_enc_x1,.-aes128gcmsiv_aes_ks_enc_x1
618.globl aes128gcmsiv_kdf
619.hidden aes128gcmsiv_kdf
620.type aes128gcmsiv_kdf,@function
621.align 16
622aes128gcmsiv_kdf:
623.cfi_startproc
624
625
626
627
628 vmovdqa (%rdx),%xmm1
629 vmovdqa 0(%rdi),%xmm9
630 vmovdqa and_mask(%rip),%xmm12
631 vmovdqa one(%rip),%xmm13
632 vpshufd $0x90,%xmm9,%xmm9
633 vpand %xmm12,%xmm9,%xmm9
634 vpaddd %xmm13,%xmm9,%xmm10
635 vpaddd %xmm13,%xmm10,%xmm11
636 vpaddd %xmm13,%xmm11,%xmm12
637
638 vpxor %xmm1,%xmm9,%xmm9
639 vpxor %xmm1,%xmm10,%xmm10
640 vpxor %xmm1,%xmm11,%xmm11
641 vpxor %xmm1,%xmm12,%xmm12
642
643 vmovdqa 16(%rdx),%xmm1
644 vaesenc %xmm1,%xmm9,%xmm9
645 vaesenc %xmm1,%xmm10,%xmm10
646 vaesenc %xmm1,%xmm11,%xmm11
647 vaesenc %xmm1,%xmm12,%xmm12
648
649 vmovdqa 32(%rdx),%xmm2
650 vaesenc %xmm2,%xmm9,%xmm9
651 vaesenc %xmm2,%xmm10,%xmm10
652 vaesenc %xmm2,%xmm11,%xmm11
653 vaesenc %xmm2,%xmm12,%xmm12
654
655 vmovdqa 48(%rdx),%xmm1
656 vaesenc %xmm1,%xmm9,%xmm9
657 vaesenc %xmm1,%xmm10,%xmm10
658 vaesenc %xmm1,%xmm11,%xmm11
659 vaesenc %xmm1,%xmm12,%xmm12
660
661 vmovdqa 64(%rdx),%xmm2
662 vaesenc %xmm2,%xmm9,%xmm9
663 vaesenc %xmm2,%xmm10,%xmm10
664 vaesenc %xmm2,%xmm11,%xmm11
665 vaesenc %xmm2,%xmm12,%xmm12
666
667 vmovdqa 80(%rdx),%xmm1
668 vaesenc %xmm1,%xmm9,%xmm9
669 vaesenc %xmm1,%xmm10,%xmm10
670 vaesenc %xmm1,%xmm11,%xmm11
671 vaesenc %xmm1,%xmm12,%xmm12
672
673 vmovdqa 96(%rdx),%xmm2
674 vaesenc %xmm2,%xmm9,%xmm9
675 vaesenc %xmm2,%xmm10,%xmm10
676 vaesenc %xmm2,%xmm11,%xmm11
677 vaesenc %xmm2,%xmm12,%xmm12
678
679 vmovdqa 112(%rdx),%xmm1
680 vaesenc %xmm1,%xmm9,%xmm9
681 vaesenc %xmm1,%xmm10,%xmm10
682 vaesenc %xmm1,%xmm11,%xmm11
683 vaesenc %xmm1,%xmm12,%xmm12
684
685 vmovdqa 128(%rdx),%xmm2
686 vaesenc %xmm2,%xmm9,%xmm9
687 vaesenc %xmm2,%xmm10,%xmm10
688 vaesenc %xmm2,%xmm11,%xmm11
689 vaesenc %xmm2,%xmm12,%xmm12
690
691 vmovdqa 144(%rdx),%xmm1
692 vaesenc %xmm1,%xmm9,%xmm9
693 vaesenc %xmm1,%xmm10,%xmm10
694 vaesenc %xmm1,%xmm11,%xmm11
695 vaesenc %xmm1,%xmm12,%xmm12
696
697 vmovdqa 160(%rdx),%xmm2
698 vaesenclast %xmm2,%xmm9,%xmm9
699 vaesenclast %xmm2,%xmm10,%xmm10
700 vaesenclast %xmm2,%xmm11,%xmm11
701 vaesenclast %xmm2,%xmm12,%xmm12
702
703
704 vmovdqa %xmm9,0(%rsi)
705 vmovdqa %xmm10,16(%rsi)
706 vmovdqa %xmm11,32(%rsi)
707 vmovdqa %xmm12,48(%rsi)
708 .byte 0xf3,0xc3
709.cfi_endproc
710.size aes128gcmsiv_kdf,.-aes128gcmsiv_kdf
711.globl aes128gcmsiv_enc_msg_x4
712.hidden aes128gcmsiv_enc_msg_x4
713.type aes128gcmsiv_enc_msg_x4,@function
714.align 16
715aes128gcmsiv_enc_msg_x4:
716.cfi_startproc
717 testq %r8,%r8
718 jnz .L128_enc_msg_x4_start
719 .byte 0xf3,0xc3
720
721.L128_enc_msg_x4_start:
722 pushq %r12
723.cfi_adjust_cfa_offset 8
724.cfi_offset %r12,-16
725 pushq %r13
726.cfi_adjust_cfa_offset 8
727.cfi_offset %r13,-24
728
729 shrq $4,%r8
730 movq %r8,%r10
731 shlq $62,%r10
732 shrq $62,%r10
733
734
735 vmovdqa (%rdx),%xmm15
736 vpor OR_MASK(%rip),%xmm15,%xmm15
737
738 vmovdqu four(%rip),%xmm4
739 vmovdqa %xmm15,%xmm0
740 vpaddd one(%rip),%xmm15,%xmm1
741 vpaddd two(%rip),%xmm15,%xmm2
742 vpaddd three(%rip),%xmm15,%xmm3
743
744 shrq $2,%r8
745 je .L128_enc_msg_x4_check_remainder
746
747 subq $64,%rsi
748 subq $64,%rdi
749
750.L128_enc_msg_x4_loop1:
751 addq $64,%rsi
752 addq $64,%rdi
753
754 vmovdqa %xmm0,%xmm5
755 vmovdqa %xmm1,%xmm6
756 vmovdqa %xmm2,%xmm7
757 vmovdqa %xmm3,%xmm8
758
759 vpxor (%rcx),%xmm5,%xmm5
760 vpxor (%rcx),%xmm6,%xmm6
761 vpxor (%rcx),%xmm7,%xmm7
762 vpxor (%rcx),%xmm8,%xmm8
763
764 vmovdqu 16(%rcx),%xmm12
765 vaesenc %xmm12,%xmm5,%xmm5
766 vaesenc %xmm12,%xmm6,%xmm6
767 vaesenc %xmm12,%xmm7,%xmm7
768 vaesenc %xmm12,%xmm8,%xmm8
769
770 vpaddd %xmm4,%xmm0,%xmm0
771 vmovdqu 32(%rcx),%xmm12
772 vaesenc %xmm12,%xmm5,%xmm5
773 vaesenc %xmm12,%xmm6,%xmm6
774 vaesenc %xmm12,%xmm7,%xmm7
775 vaesenc %xmm12,%xmm8,%xmm8
776
777 vpaddd %xmm4,%xmm1,%xmm1
778 vmovdqu 48(%rcx),%xmm12
779 vaesenc %xmm12,%xmm5,%xmm5
780 vaesenc %xmm12,%xmm6,%xmm6
781 vaesenc %xmm12,%xmm7,%xmm7
782 vaesenc %xmm12,%xmm8,%xmm8
783
784 vpaddd %xmm4,%xmm2,%xmm2
785 vmovdqu 64(%rcx),%xmm12
786 vaesenc %xmm12,%xmm5,%xmm5
787 vaesenc %xmm12,%xmm6,%xmm6
788 vaesenc %xmm12,%xmm7,%xmm7
789 vaesenc %xmm12,%xmm8,%xmm8
790
791 vpaddd %xmm4,%xmm3,%xmm3
792
793 vmovdqu 80(%rcx),%xmm12
794 vaesenc %xmm12,%xmm5,%xmm5
795 vaesenc %xmm12,%xmm6,%xmm6
796 vaesenc %xmm12,%xmm7,%xmm7
797 vaesenc %xmm12,%xmm8,%xmm8
798
799 vmovdqu 96(%rcx),%xmm12
800 vaesenc %xmm12,%xmm5,%xmm5
801 vaesenc %xmm12,%xmm6,%xmm6
802 vaesenc %xmm12,%xmm7,%xmm7
803 vaesenc %xmm12,%xmm8,%xmm8
804
805 vmovdqu 112(%rcx),%xmm12
806 vaesenc %xmm12,%xmm5,%xmm5
807 vaesenc %xmm12,%xmm6,%xmm6
808 vaesenc %xmm12,%xmm7,%xmm7
809 vaesenc %xmm12,%xmm8,%xmm8
810
811 vmovdqu 128(%rcx),%xmm12
812 vaesenc %xmm12,%xmm5,%xmm5
813 vaesenc %xmm12,%xmm6,%xmm6
814 vaesenc %xmm12,%xmm7,%xmm7
815 vaesenc %xmm12,%xmm8,%xmm8
816
817 vmovdqu 144(%rcx),%xmm12
818 vaesenc %xmm12,%xmm5,%xmm5
819 vaesenc %xmm12,%xmm6,%xmm6
820 vaesenc %xmm12,%xmm7,%xmm7
821 vaesenc %xmm12,%xmm8,%xmm8
822
823 vmovdqu 160(%rcx),%xmm12
824 vaesenclast %xmm12,%xmm5,%xmm5
825 vaesenclast %xmm12,%xmm6,%xmm6
826 vaesenclast %xmm12,%xmm7,%xmm7
827 vaesenclast %xmm12,%xmm8,%xmm8
828
829
830
831 vpxor 0(%rdi),%xmm5,%xmm5
832 vpxor 16(%rdi),%xmm6,%xmm6
833 vpxor 32(%rdi),%xmm7,%xmm7
834 vpxor 48(%rdi),%xmm8,%xmm8
835
836 subq $1,%r8
837
838 vmovdqu %xmm5,0(%rsi)
839 vmovdqu %xmm6,16(%rsi)
840 vmovdqu %xmm7,32(%rsi)
841 vmovdqu %xmm8,48(%rsi)
842
843 jne .L128_enc_msg_x4_loop1
844
845 addq $64,%rsi
846 addq $64,%rdi
847
848.L128_enc_msg_x4_check_remainder:
849 cmpq $0,%r10
850 je .L128_enc_msg_x4_out
851
852.L128_enc_msg_x4_loop2:
853
854
855 vmovdqa %xmm0,%xmm5
856 vpaddd one(%rip),%xmm0,%xmm0
857
858 vpxor (%rcx),%xmm5,%xmm5
859 vaesenc 16(%rcx),%xmm5,%xmm5
860 vaesenc 32(%rcx),%xmm5,%xmm5
861 vaesenc 48(%rcx),%xmm5,%xmm5
862 vaesenc 64(%rcx),%xmm5,%xmm5
863 vaesenc 80(%rcx),%xmm5,%xmm5
864 vaesenc 96(%rcx),%xmm5,%xmm5
865 vaesenc 112(%rcx),%xmm5,%xmm5
866 vaesenc 128(%rcx),%xmm5,%xmm5
867 vaesenc 144(%rcx),%xmm5,%xmm5
868 vaesenclast 160(%rcx),%xmm5,%xmm5
869
870
871 vpxor (%rdi),%xmm5,%xmm5
872 vmovdqu %xmm5,(%rsi)
873
874 addq $16,%rdi
875 addq $16,%rsi
876
877 subq $1,%r10
878 jne .L128_enc_msg_x4_loop2
879
880.L128_enc_msg_x4_out:
881 popq %r13
882.cfi_adjust_cfa_offset -8
883.cfi_restore %r13
884 popq %r12
885.cfi_adjust_cfa_offset -8
886.cfi_restore %r12
887 .byte 0xf3,0xc3
888.cfi_endproc
889.size aes128gcmsiv_enc_msg_x4,.-aes128gcmsiv_enc_msg_x4
890.globl aes128gcmsiv_enc_msg_x8
891.hidden aes128gcmsiv_enc_msg_x8
892.type aes128gcmsiv_enc_msg_x8,@function
893.align 16
894aes128gcmsiv_enc_msg_x8:
895.cfi_startproc
896 testq %r8,%r8
897 jnz .L128_enc_msg_x8_start
898 .byte 0xf3,0xc3
899
900.L128_enc_msg_x8_start:
901 pushq %r12
902.cfi_adjust_cfa_offset 8
903.cfi_offset %r12,-16
904 pushq %r13
905.cfi_adjust_cfa_offset 8
906.cfi_offset %r13,-24
907 pushq %rbp
908.cfi_adjust_cfa_offset 8
909.cfi_offset %rbp,-32
910 movq %rsp,%rbp
911.cfi_def_cfa_register rbp
912
913
914 subq $128,%rsp
915 andq $-64,%rsp
916
917 shrq $4,%r8
918 movq %r8,%r10
919 shlq $61,%r10
920 shrq $61,%r10
921
922
923 vmovdqu (%rdx),%xmm1
924 vpor OR_MASK(%rip),%xmm1,%xmm1
925
926
927 vpaddd seven(%rip),%xmm1,%xmm0
928 vmovdqu %xmm0,(%rsp)
929 vpaddd one(%rip),%xmm1,%xmm9
930 vpaddd two(%rip),%xmm1,%xmm10
931 vpaddd three(%rip),%xmm1,%xmm11
932 vpaddd four(%rip),%xmm1,%xmm12
933 vpaddd five(%rip),%xmm1,%xmm13
934 vpaddd six(%rip),%xmm1,%xmm14
935 vmovdqa %xmm1,%xmm0
936
937 shrq $3,%r8
938 je .L128_enc_msg_x8_check_remainder
939
940 subq $128,%rsi
941 subq $128,%rdi
942
943.L128_enc_msg_x8_loop1:
944 addq $128,%rsi
945 addq $128,%rdi
946
947 vmovdqa %xmm0,%xmm1
948 vmovdqa %xmm9,%xmm2
949 vmovdqa %xmm10,%xmm3
950 vmovdqa %xmm11,%xmm4
951 vmovdqa %xmm12,%xmm5
952 vmovdqa %xmm13,%xmm6
953 vmovdqa %xmm14,%xmm7
954
955 vmovdqu (%rsp),%xmm8
956
957 vpxor (%rcx),%xmm1,%xmm1
958 vpxor (%rcx),%xmm2,%xmm2
959 vpxor (%rcx),%xmm3,%xmm3
960 vpxor (%rcx),%xmm4,%xmm4
961 vpxor (%rcx),%xmm5,%xmm5
962 vpxor (%rcx),%xmm6,%xmm6
963 vpxor (%rcx),%xmm7,%xmm7
964 vpxor (%rcx),%xmm8,%xmm8
965
966 vmovdqu 16(%rcx),%xmm15
967 vaesenc %xmm15,%xmm1,%xmm1
968 vaesenc %xmm15,%xmm2,%xmm2
969 vaesenc %xmm15,%xmm3,%xmm3
970 vaesenc %xmm15,%xmm4,%xmm4
971 vaesenc %xmm15,%xmm5,%xmm5
972 vaesenc %xmm15,%xmm6,%xmm6
973 vaesenc %xmm15,%xmm7,%xmm7
974 vaesenc %xmm15,%xmm8,%xmm8
975
976 vmovdqu (%rsp),%xmm14
977 vpaddd eight(%rip),%xmm14,%xmm14
978 vmovdqu %xmm14,(%rsp)
979 vmovdqu 32(%rcx),%xmm15
980 vaesenc %xmm15,%xmm1,%xmm1
981 vaesenc %xmm15,%xmm2,%xmm2
982 vaesenc %xmm15,%xmm3,%xmm3
983 vaesenc %xmm15,%xmm4,%xmm4
984 vaesenc %xmm15,%xmm5,%xmm5
985 vaesenc %xmm15,%xmm6,%xmm6
986 vaesenc %xmm15,%xmm7,%xmm7
987 vaesenc %xmm15,%xmm8,%xmm8
988
989 vpsubd one(%rip),%xmm14,%xmm14
990 vmovdqu 48(%rcx),%xmm15
991 vaesenc %xmm15,%xmm1,%xmm1
992 vaesenc %xmm15,%xmm2,%xmm2
993 vaesenc %xmm15,%xmm3,%xmm3
994 vaesenc %xmm15,%xmm4,%xmm4
995 vaesenc %xmm15,%xmm5,%xmm5
996 vaesenc %xmm15,%xmm6,%xmm6
997 vaesenc %xmm15,%xmm7,%xmm7
998 vaesenc %xmm15,%xmm8,%xmm8
999
1000 vpaddd eight(%rip),%xmm0,%xmm0
1001 vmovdqu 64(%rcx),%xmm15
1002 vaesenc %xmm15,%xmm1,%xmm1
1003 vaesenc %xmm15,%xmm2,%xmm2
1004 vaesenc %xmm15,%xmm3,%xmm3
1005 vaesenc %xmm15,%xmm4,%xmm4
1006 vaesenc %xmm15,%xmm5,%xmm5
1007 vaesenc %xmm15,%xmm6,%xmm6
1008 vaesenc %xmm15,%xmm7,%xmm7
1009 vaesenc %xmm15,%xmm8,%xmm8
1010
1011 vpaddd eight(%rip),%xmm9,%xmm9
1012 vmovdqu 80(%rcx),%xmm15
1013 vaesenc %xmm15,%xmm1,%xmm1
1014 vaesenc %xmm15,%xmm2,%xmm2
1015 vaesenc %xmm15,%xmm3,%xmm3
1016 vaesenc %xmm15,%xmm4,%xmm4
1017 vaesenc %xmm15,%xmm5,%xmm5
1018 vaesenc %xmm15,%xmm6,%xmm6
1019 vaesenc %xmm15,%xmm7,%xmm7
1020 vaesenc %xmm15,%xmm8,%xmm8
1021
1022 vpaddd eight(%rip),%xmm10,%xmm10
1023 vmovdqu 96(%rcx),%xmm15
1024 vaesenc %xmm15,%xmm1,%xmm1
1025 vaesenc %xmm15,%xmm2,%xmm2
1026 vaesenc %xmm15,%xmm3,%xmm3
1027 vaesenc %xmm15,%xmm4,%xmm4
1028 vaesenc %xmm15,%xmm5,%xmm5
1029 vaesenc %xmm15,%xmm6,%xmm6
1030 vaesenc %xmm15,%xmm7,%xmm7
1031 vaesenc %xmm15,%xmm8,%xmm8
1032
1033 vpaddd eight(%rip),%xmm11,%xmm11
1034 vmovdqu 112(%rcx),%xmm15
1035 vaesenc %xmm15,%xmm1,%xmm1
1036 vaesenc %xmm15,%xmm2,%xmm2
1037 vaesenc %xmm15,%xmm3,%xmm3
1038 vaesenc %xmm15,%xmm4,%xmm4
1039 vaesenc %xmm15,%xmm5,%xmm5
1040 vaesenc %xmm15,%xmm6,%xmm6
1041 vaesenc %xmm15,%xmm7,%xmm7
1042 vaesenc %xmm15,%xmm8,%xmm8
1043
1044 vpaddd eight(%rip),%xmm12,%xmm12
1045 vmovdqu 128(%rcx),%xmm15
1046 vaesenc %xmm15,%xmm1,%xmm1
1047 vaesenc %xmm15,%xmm2,%xmm2
1048 vaesenc %xmm15,%xmm3,%xmm3
1049 vaesenc %xmm15,%xmm4,%xmm4
1050 vaesenc %xmm15,%xmm5,%xmm5
1051 vaesenc %xmm15,%xmm6,%xmm6
1052 vaesenc %xmm15,%xmm7,%xmm7
1053 vaesenc %xmm15,%xmm8,%xmm8
1054
1055 vpaddd eight(%rip),%xmm13,%xmm13
1056 vmovdqu 144(%rcx),%xmm15
1057 vaesenc %xmm15,%xmm1,%xmm1
1058 vaesenc %xmm15,%xmm2,%xmm2
1059 vaesenc %xmm15,%xmm3,%xmm3
1060 vaesenc %xmm15,%xmm4,%xmm4
1061 vaesenc %xmm15,%xmm5,%xmm5
1062 vaesenc %xmm15,%xmm6,%xmm6
1063 vaesenc %xmm15,%xmm7,%xmm7
1064 vaesenc %xmm15,%xmm8,%xmm8
1065
1066 vmovdqu 160(%rcx),%xmm15
1067 vaesenclast %xmm15,%xmm1,%xmm1
1068 vaesenclast %xmm15,%xmm2,%xmm2
1069 vaesenclast %xmm15,%xmm3,%xmm3
1070 vaesenclast %xmm15,%xmm4,%xmm4
1071 vaesenclast %xmm15,%xmm5,%xmm5
1072 vaesenclast %xmm15,%xmm6,%xmm6
1073 vaesenclast %xmm15,%xmm7,%xmm7
1074 vaesenclast %xmm15,%xmm8,%xmm8
1075
1076
1077
1078 vpxor 0(%rdi),%xmm1,%xmm1
1079 vpxor 16(%rdi),%xmm2,%xmm2
1080 vpxor 32(%rdi),%xmm3,%xmm3
1081 vpxor 48(%rdi),%xmm4,%xmm4
1082 vpxor 64(%rdi),%xmm5,%xmm5
1083 vpxor 80(%rdi),%xmm6,%xmm6
1084 vpxor 96(%rdi),%xmm7,%xmm7
1085 vpxor 112(%rdi),%xmm8,%xmm8
1086
1087 decq %r8
1088
1089 vmovdqu %xmm1,0(%rsi)
1090 vmovdqu %xmm2,16(%rsi)
1091 vmovdqu %xmm3,32(%rsi)
1092 vmovdqu %xmm4,48(%rsi)
1093 vmovdqu %xmm5,64(%rsi)
1094 vmovdqu %xmm6,80(%rsi)
1095 vmovdqu %xmm7,96(%rsi)
1096 vmovdqu %xmm8,112(%rsi)
1097
1098 jne .L128_enc_msg_x8_loop1
1099
1100 addq $128,%rsi
1101 addq $128,%rdi
1102
1103.L128_enc_msg_x8_check_remainder:
1104 cmpq $0,%r10
1105 je .L128_enc_msg_x8_out
1106
1107.L128_enc_msg_x8_loop2:
1108
1109
1110 vmovdqa %xmm0,%xmm1
1111 vpaddd one(%rip),%xmm0,%xmm0
1112
1113 vpxor (%rcx),%xmm1,%xmm1
1114 vaesenc 16(%rcx),%xmm1,%xmm1
1115 vaesenc 32(%rcx),%xmm1,%xmm1
1116 vaesenc 48(%rcx),%xmm1,%xmm1
1117 vaesenc 64(%rcx),%xmm1,%xmm1
1118 vaesenc 80(%rcx),%xmm1,%xmm1
1119 vaesenc 96(%rcx),%xmm1,%xmm1
1120 vaesenc 112(%rcx),%xmm1,%xmm1
1121 vaesenc 128(%rcx),%xmm1,%xmm1
1122 vaesenc 144(%rcx),%xmm1,%xmm1
1123 vaesenclast 160(%rcx),%xmm1,%xmm1
1124
1125
1126 vpxor (%rdi),%xmm1,%xmm1
1127
1128 vmovdqu %xmm1,(%rsi)
1129
1130 addq $16,%rdi
1131 addq $16,%rsi
1132
1133 decq %r10
1134 jne .L128_enc_msg_x8_loop2
1135
1136.L128_enc_msg_x8_out:
1137 movq %rbp,%rsp
1138.cfi_def_cfa_register %rsp
1139 popq %rbp
1140.cfi_adjust_cfa_offset -8
1141.cfi_restore %rbp
1142 popq %r13
1143.cfi_adjust_cfa_offset -8
1144.cfi_restore %r13
1145 popq %r12
1146.cfi_adjust_cfa_offset -8
1147.cfi_restore %r12
1148 .byte 0xf3,0xc3
1149.cfi_endproc
1150.size aes128gcmsiv_enc_msg_x8,.-aes128gcmsiv_enc_msg_x8
1151.globl aes128gcmsiv_dec
1152.hidden aes128gcmsiv_dec
1153.type aes128gcmsiv_dec,@function
1154.align 16
1155aes128gcmsiv_dec:
1156.cfi_startproc
1157 testq $~15,%r9
1158 jnz .L128_dec_start
1159 .byte 0xf3,0xc3
1160
1161.L128_dec_start:
1162 vzeroupper
1163 vmovdqa (%rdx),%xmm0
1164 movq %rdx,%rax
1165
1166 leaq 32(%rax),%rax
1167 leaq 32(%rcx),%rcx
1168
1169
1170 vmovdqu (%rdi,%r9,1),%xmm15
1171 vpor OR_MASK(%rip),%xmm15,%xmm15
1172 andq $~15,%r9
1173
1174
1175 cmpq $96,%r9
1176 jb .L128_dec_loop2
1177
1178
1179 subq $96,%r9
1180 vmovdqa %xmm15,%xmm7
1181 vpaddd one(%rip),%xmm7,%xmm8
1182 vpaddd two(%rip),%xmm7,%xmm9
1183 vpaddd one(%rip),%xmm9,%xmm10
1184 vpaddd two(%rip),%xmm9,%xmm11
1185 vpaddd one(%rip),%xmm11,%xmm12
1186 vpaddd two(%rip),%xmm11,%xmm15
1187
1188 vpxor (%r8),%xmm7,%xmm7
1189 vpxor (%r8),%xmm8,%xmm8
1190 vpxor (%r8),%xmm9,%xmm9
1191 vpxor (%r8),%xmm10,%xmm10
1192 vpxor (%r8),%xmm11,%xmm11
1193 vpxor (%r8),%xmm12,%xmm12
1194
1195 vmovdqu 16(%r8),%xmm4
1196 vaesenc %xmm4,%xmm7,%xmm7
1197 vaesenc %xmm4,%xmm8,%xmm8
1198 vaesenc %xmm4,%xmm9,%xmm9
1199 vaesenc %xmm4,%xmm10,%xmm10
1200 vaesenc %xmm4,%xmm11,%xmm11
1201 vaesenc %xmm4,%xmm12,%xmm12
1202
1203 vmovdqu 32(%r8),%xmm4
1204 vaesenc %xmm4,%xmm7,%xmm7
1205 vaesenc %xmm4,%xmm8,%xmm8
1206 vaesenc %xmm4,%xmm9,%xmm9
1207 vaesenc %xmm4,%xmm10,%xmm10
1208 vaesenc %xmm4,%xmm11,%xmm11
1209 vaesenc %xmm4,%xmm12,%xmm12
1210
1211 vmovdqu 48(%r8),%xmm4
1212 vaesenc %xmm4,%xmm7,%xmm7
1213 vaesenc %xmm4,%xmm8,%xmm8
1214 vaesenc %xmm4,%xmm9,%xmm9
1215 vaesenc %xmm4,%xmm10,%xmm10
1216 vaesenc %xmm4,%xmm11,%xmm11
1217 vaesenc %xmm4,%xmm12,%xmm12
1218
1219 vmovdqu 64(%r8),%xmm4
1220 vaesenc %xmm4,%xmm7,%xmm7
1221 vaesenc %xmm4,%xmm8,%xmm8
1222 vaesenc %xmm4,%xmm9,%xmm9
1223 vaesenc %xmm4,%xmm10,%xmm10
1224 vaesenc %xmm4,%xmm11,%xmm11
1225 vaesenc %xmm4,%xmm12,%xmm12
1226
1227 vmovdqu 80(%r8),%xmm4
1228 vaesenc %xmm4,%xmm7,%xmm7
1229 vaesenc %xmm4,%xmm8,%xmm8
1230 vaesenc %xmm4,%xmm9,%xmm9
1231 vaesenc %xmm4,%xmm10,%xmm10
1232 vaesenc %xmm4,%xmm11,%xmm11
1233 vaesenc %xmm4,%xmm12,%xmm12
1234
1235 vmovdqu 96(%r8),%xmm4
1236 vaesenc %xmm4,%xmm7,%xmm7
1237 vaesenc %xmm4,%xmm8,%xmm8
1238 vaesenc %xmm4,%xmm9,%xmm9
1239 vaesenc %xmm4,%xmm10,%xmm10
1240 vaesenc %xmm4,%xmm11,%xmm11
1241 vaesenc %xmm4,%xmm12,%xmm12
1242
1243 vmovdqu 112(%r8),%xmm4
1244 vaesenc %xmm4,%xmm7,%xmm7
1245 vaesenc %xmm4,%xmm8,%xmm8
1246 vaesenc %xmm4,%xmm9,%xmm9
1247 vaesenc %xmm4,%xmm10,%xmm10
1248 vaesenc %xmm4,%xmm11,%xmm11
1249 vaesenc %xmm4,%xmm12,%xmm12
1250
1251 vmovdqu 128(%r8),%xmm4
1252 vaesenc %xmm4,%xmm7,%xmm7
1253 vaesenc %xmm4,%xmm8,%xmm8
1254 vaesenc %xmm4,%xmm9,%xmm9
1255 vaesenc %xmm4,%xmm10,%xmm10
1256 vaesenc %xmm4,%xmm11,%xmm11
1257 vaesenc %xmm4,%xmm12,%xmm12
1258
1259 vmovdqu 144(%r8),%xmm4
1260 vaesenc %xmm4,%xmm7,%xmm7
1261 vaesenc %xmm4,%xmm8,%xmm8
1262 vaesenc %xmm4,%xmm9,%xmm9
1263 vaesenc %xmm4,%xmm10,%xmm10
1264 vaesenc %xmm4,%xmm11,%xmm11
1265 vaesenc %xmm4,%xmm12,%xmm12
1266
1267 vmovdqu 160(%r8),%xmm4
1268 vaesenclast %xmm4,%xmm7,%xmm7
1269 vaesenclast %xmm4,%xmm8,%xmm8
1270 vaesenclast %xmm4,%xmm9,%xmm9
1271 vaesenclast %xmm4,%xmm10,%xmm10
1272 vaesenclast %xmm4,%xmm11,%xmm11
1273 vaesenclast %xmm4,%xmm12,%xmm12
1274
1275
1276 vpxor 0(%rdi),%xmm7,%xmm7
1277 vpxor 16(%rdi),%xmm8,%xmm8
1278 vpxor 32(%rdi),%xmm9,%xmm9
1279 vpxor 48(%rdi),%xmm10,%xmm10
1280 vpxor 64(%rdi),%xmm11,%xmm11
1281 vpxor 80(%rdi),%xmm12,%xmm12
1282
1283 vmovdqu %xmm7,0(%rsi)
1284 vmovdqu %xmm8,16(%rsi)
1285 vmovdqu %xmm9,32(%rsi)
1286 vmovdqu %xmm10,48(%rsi)
1287 vmovdqu %xmm11,64(%rsi)
1288 vmovdqu %xmm12,80(%rsi)
1289
1290 addq $96,%rdi
1291 addq $96,%rsi
1292 jmp .L128_dec_loop1
1293
1294
1295.align 64
1296.L128_dec_loop1:
1297 cmpq $96,%r9
1298 jb .L128_dec_finish_96
1299 subq $96,%r9
1300
1301 vmovdqa %xmm12,%xmm6
1302 vmovdqa %xmm11,16-32(%rax)
1303 vmovdqa %xmm10,32-32(%rax)
1304 vmovdqa %xmm9,48-32(%rax)
1305 vmovdqa %xmm8,64-32(%rax)
1306 vmovdqa %xmm7,80-32(%rax)
1307
1308 vmovdqa %xmm15,%xmm7
1309 vpaddd one(%rip),%xmm7,%xmm8
1310 vpaddd two(%rip),%xmm7,%xmm9
1311 vpaddd one(%rip),%xmm9,%xmm10
1312 vpaddd two(%rip),%xmm9,%xmm11
1313 vpaddd one(%rip),%xmm11,%xmm12
1314 vpaddd two(%rip),%xmm11,%xmm15
1315
1316 vmovdqa (%r8),%xmm4
1317 vpxor %xmm4,%xmm7,%xmm7
1318 vpxor %xmm4,%xmm8,%xmm8
1319 vpxor %xmm4,%xmm9,%xmm9
1320 vpxor %xmm4,%xmm10,%xmm10
1321 vpxor %xmm4,%xmm11,%xmm11
1322 vpxor %xmm4,%xmm12,%xmm12
1323
1324 vmovdqu 0-32(%rcx),%xmm4
1325 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2
1326 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3
1327 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm1
1328 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm4
1329 vpxor %xmm4,%xmm1,%xmm1
1330
1331 vmovdqu 16(%r8),%xmm4
1332 vaesenc %xmm4,%xmm7,%xmm7
1333 vaesenc %xmm4,%xmm8,%xmm8
1334 vaesenc %xmm4,%xmm9,%xmm9
1335 vaesenc %xmm4,%xmm10,%xmm10
1336 vaesenc %xmm4,%xmm11,%xmm11
1337 vaesenc %xmm4,%xmm12,%xmm12
1338
1339 vmovdqu -16(%rax),%xmm6
1340 vmovdqu -16(%rcx),%xmm13
1341
1342 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1343 vpxor %xmm4,%xmm1,%xmm1
1344 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1345 vpxor %xmm4,%xmm2,%xmm2
1346 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1347 vpxor %xmm4,%xmm3,%xmm3
1348 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1349 vpxor %xmm4,%xmm1,%xmm1
1350
1351
1352 vmovdqu 32(%r8),%xmm4
1353 vaesenc %xmm4,%xmm7,%xmm7
1354 vaesenc %xmm4,%xmm8,%xmm8
1355 vaesenc %xmm4,%xmm9,%xmm9
1356 vaesenc %xmm4,%xmm10,%xmm10
1357 vaesenc %xmm4,%xmm11,%xmm11
1358 vaesenc %xmm4,%xmm12,%xmm12
1359
1360 vmovdqu 0(%rax),%xmm6
1361 vmovdqu 0(%rcx),%xmm13
1362
1363 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1364 vpxor %xmm4,%xmm1,%xmm1
1365 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1366 vpxor %xmm4,%xmm2,%xmm2
1367 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1368 vpxor %xmm4,%xmm3,%xmm3
1369 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1370 vpxor %xmm4,%xmm1,%xmm1
1371
1372
1373 vmovdqu 48(%r8),%xmm4
1374 vaesenc %xmm4,%xmm7,%xmm7
1375 vaesenc %xmm4,%xmm8,%xmm8
1376 vaesenc %xmm4,%xmm9,%xmm9
1377 vaesenc %xmm4,%xmm10,%xmm10
1378 vaesenc %xmm4,%xmm11,%xmm11
1379 vaesenc %xmm4,%xmm12,%xmm12
1380
1381 vmovdqu 16(%rax),%xmm6
1382 vmovdqu 16(%rcx),%xmm13
1383
1384 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1385 vpxor %xmm4,%xmm1,%xmm1
1386 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1387 vpxor %xmm4,%xmm2,%xmm2
1388 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1389 vpxor %xmm4,%xmm3,%xmm3
1390 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1391 vpxor %xmm4,%xmm1,%xmm1
1392
1393
1394 vmovdqu 64(%r8),%xmm4
1395 vaesenc %xmm4,%xmm7,%xmm7
1396 vaesenc %xmm4,%xmm8,%xmm8
1397 vaesenc %xmm4,%xmm9,%xmm9
1398 vaesenc %xmm4,%xmm10,%xmm10
1399 vaesenc %xmm4,%xmm11,%xmm11
1400 vaesenc %xmm4,%xmm12,%xmm12
1401
1402 vmovdqu 32(%rax),%xmm6
1403 vmovdqu 32(%rcx),%xmm13
1404
1405 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1406 vpxor %xmm4,%xmm1,%xmm1
1407 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1408 vpxor %xmm4,%xmm2,%xmm2
1409 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1410 vpxor %xmm4,%xmm3,%xmm3
1411 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1412 vpxor %xmm4,%xmm1,%xmm1
1413
1414
1415 vmovdqu 80(%r8),%xmm4
1416 vaesenc %xmm4,%xmm7,%xmm7
1417 vaesenc %xmm4,%xmm8,%xmm8
1418 vaesenc %xmm4,%xmm9,%xmm9
1419 vaesenc %xmm4,%xmm10,%xmm10
1420 vaesenc %xmm4,%xmm11,%xmm11
1421 vaesenc %xmm4,%xmm12,%xmm12
1422
1423 vmovdqu 96(%r8),%xmm4
1424 vaesenc %xmm4,%xmm7,%xmm7
1425 vaesenc %xmm4,%xmm8,%xmm8
1426 vaesenc %xmm4,%xmm9,%xmm9
1427 vaesenc %xmm4,%xmm10,%xmm10
1428 vaesenc %xmm4,%xmm11,%xmm11
1429 vaesenc %xmm4,%xmm12,%xmm12
1430
1431 vmovdqu 112(%r8),%xmm4
1432 vaesenc %xmm4,%xmm7,%xmm7
1433 vaesenc %xmm4,%xmm8,%xmm8
1434 vaesenc %xmm4,%xmm9,%xmm9
1435 vaesenc %xmm4,%xmm10,%xmm10
1436 vaesenc %xmm4,%xmm11,%xmm11
1437 vaesenc %xmm4,%xmm12,%xmm12
1438
1439
1440 vmovdqa 80-32(%rax),%xmm6
1441 vpxor %xmm0,%xmm6,%xmm6
1442 vmovdqu 80-32(%rcx),%xmm5
1443
1444 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4
1445 vpxor %xmm4,%xmm1,%xmm1
1446 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4
1447 vpxor %xmm4,%xmm2,%xmm2
1448 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4
1449 vpxor %xmm4,%xmm3,%xmm3
1450 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4
1451 vpxor %xmm4,%xmm1,%xmm1
1452
1453 vmovdqu 128(%r8),%xmm4
1454 vaesenc %xmm4,%xmm7,%xmm7
1455 vaesenc %xmm4,%xmm8,%xmm8
1456 vaesenc %xmm4,%xmm9,%xmm9
1457 vaesenc %xmm4,%xmm10,%xmm10
1458 vaesenc %xmm4,%xmm11,%xmm11
1459 vaesenc %xmm4,%xmm12,%xmm12
1460
1461
1462 vpsrldq $8,%xmm1,%xmm4
1463 vpxor %xmm4,%xmm2,%xmm5
1464 vpslldq $8,%xmm1,%xmm4
1465 vpxor %xmm4,%xmm3,%xmm0
1466
1467 vmovdqa poly(%rip),%xmm3
1468
1469 vmovdqu 144(%r8),%xmm4
1470 vaesenc %xmm4,%xmm7,%xmm7
1471 vaesenc %xmm4,%xmm8,%xmm8
1472 vaesenc %xmm4,%xmm9,%xmm9
1473 vaesenc %xmm4,%xmm10,%xmm10
1474 vaesenc %xmm4,%xmm11,%xmm11
1475 vaesenc %xmm4,%xmm12,%xmm12
1476
1477 vmovdqu 160(%r8),%xmm6
1478 vpalignr $8,%xmm0,%xmm0,%xmm2
1479 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
1480 vpxor %xmm0,%xmm2,%xmm0
1481
1482 vpxor 0(%rdi),%xmm6,%xmm4
1483 vaesenclast %xmm4,%xmm7,%xmm7
1484 vpxor 16(%rdi),%xmm6,%xmm4
1485 vaesenclast %xmm4,%xmm8,%xmm8
1486 vpxor 32(%rdi),%xmm6,%xmm4
1487 vaesenclast %xmm4,%xmm9,%xmm9
1488 vpxor 48(%rdi),%xmm6,%xmm4
1489 vaesenclast %xmm4,%xmm10,%xmm10
1490 vpxor 64(%rdi),%xmm6,%xmm4
1491 vaesenclast %xmm4,%xmm11,%xmm11
1492 vpxor 80(%rdi),%xmm6,%xmm4
1493 vaesenclast %xmm4,%xmm12,%xmm12
1494
1495 vpalignr $8,%xmm0,%xmm0,%xmm2
1496 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
1497 vpxor %xmm0,%xmm2,%xmm0
1498
1499 vmovdqu %xmm7,0(%rsi)
1500 vmovdqu %xmm8,16(%rsi)
1501 vmovdqu %xmm9,32(%rsi)
1502 vmovdqu %xmm10,48(%rsi)
1503 vmovdqu %xmm11,64(%rsi)
1504 vmovdqu %xmm12,80(%rsi)
1505
1506 vpxor %xmm5,%xmm0,%xmm0
1507
1508 leaq 96(%rdi),%rdi
1509 leaq 96(%rsi),%rsi
1510 jmp .L128_dec_loop1
1511
1512.L128_dec_finish_96:
1513 vmovdqa %xmm12,%xmm6
1514 vmovdqa %xmm11,16-32(%rax)
1515 vmovdqa %xmm10,32-32(%rax)
1516 vmovdqa %xmm9,48-32(%rax)
1517 vmovdqa %xmm8,64-32(%rax)
1518 vmovdqa %xmm7,80-32(%rax)
1519
1520 vmovdqu 0-32(%rcx),%xmm4
1521 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm1
1522 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2
1523 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3
1524 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm4
1525 vpxor %xmm4,%xmm1,%xmm1
1526
1527 vmovdqu -16(%rax),%xmm6
1528 vmovdqu -16(%rcx),%xmm13
1529
1530 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1531 vpxor %xmm4,%xmm1,%xmm1
1532 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1533 vpxor %xmm4,%xmm2,%xmm2
1534 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1535 vpxor %xmm4,%xmm3,%xmm3
1536 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1537 vpxor %xmm4,%xmm1,%xmm1
1538
1539 vmovdqu 0(%rax),%xmm6
1540 vmovdqu 0(%rcx),%xmm13
1541
1542 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1543 vpxor %xmm4,%xmm1,%xmm1
1544 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1545 vpxor %xmm4,%xmm2,%xmm2
1546 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1547 vpxor %xmm4,%xmm3,%xmm3
1548 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1549 vpxor %xmm4,%xmm1,%xmm1
1550
1551 vmovdqu 16(%rax),%xmm6
1552 vmovdqu 16(%rcx),%xmm13
1553
1554 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1555 vpxor %xmm4,%xmm1,%xmm1
1556 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1557 vpxor %xmm4,%xmm2,%xmm2
1558 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1559 vpxor %xmm4,%xmm3,%xmm3
1560 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1561 vpxor %xmm4,%xmm1,%xmm1
1562
1563 vmovdqu 32(%rax),%xmm6
1564 vmovdqu 32(%rcx),%xmm13
1565
1566 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
1567 vpxor %xmm4,%xmm1,%xmm1
1568 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
1569 vpxor %xmm4,%xmm2,%xmm2
1570 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
1571 vpxor %xmm4,%xmm3,%xmm3
1572 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
1573 vpxor %xmm4,%xmm1,%xmm1
1574
1575
1576 vmovdqu 80-32(%rax),%xmm6
1577 vpxor %xmm0,%xmm6,%xmm6
1578 vmovdqu 80-32(%rcx),%xmm5
1579 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4
1580 vpxor %xmm4,%xmm2,%xmm2
1581 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4
1582 vpxor %xmm4,%xmm3,%xmm3
1583 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4
1584 vpxor %xmm4,%xmm1,%xmm1
1585 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4
1586 vpxor %xmm4,%xmm1,%xmm1
1587
1588 vpsrldq $8,%xmm1,%xmm4
1589 vpxor %xmm4,%xmm2,%xmm5
1590 vpslldq $8,%xmm1,%xmm4
1591 vpxor %xmm4,%xmm3,%xmm0
1592
1593 vmovdqa poly(%rip),%xmm3
1594
1595 vpalignr $8,%xmm0,%xmm0,%xmm2
1596 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
1597 vpxor %xmm0,%xmm2,%xmm0
1598
1599 vpalignr $8,%xmm0,%xmm0,%xmm2
1600 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
1601 vpxor %xmm0,%xmm2,%xmm0
1602
1603 vpxor %xmm5,%xmm0,%xmm0
1604
1605.L128_dec_loop2:
1606
1607
1608
1609 cmpq $16,%r9
1610 jb .L128_dec_out
1611 subq $16,%r9
1612
1613 vmovdqa %xmm15,%xmm2
1614 vpaddd one(%rip),%xmm15,%xmm15
1615
1616 vpxor 0(%r8),%xmm2,%xmm2
1617 vaesenc 16(%r8),%xmm2,%xmm2
1618 vaesenc 32(%r8),%xmm2,%xmm2
1619 vaesenc 48(%r8),%xmm2,%xmm2
1620 vaesenc 64(%r8),%xmm2,%xmm2
1621 vaesenc 80(%r8),%xmm2,%xmm2
1622 vaesenc 96(%r8),%xmm2,%xmm2
1623 vaesenc 112(%r8),%xmm2,%xmm2
1624 vaesenc 128(%r8),%xmm2,%xmm2
1625 vaesenc 144(%r8),%xmm2,%xmm2
1626 vaesenclast 160(%r8),%xmm2,%xmm2
1627 vpxor (%rdi),%xmm2,%xmm2
1628 vmovdqu %xmm2,(%rsi)
1629 addq $16,%rdi
1630 addq $16,%rsi
1631
1632 vpxor %xmm2,%xmm0,%xmm0
1633 vmovdqa -32(%rcx),%xmm1
1634 call GFMUL
1635
1636 jmp .L128_dec_loop2
1637
1638.L128_dec_out:
1639 vmovdqu %xmm0,(%rdx)
1640 .byte 0xf3,0xc3
1641.cfi_endproc
1642.size aes128gcmsiv_dec, .-aes128gcmsiv_dec
1643.globl aes128gcmsiv_ecb_enc_block
1644.hidden aes128gcmsiv_ecb_enc_block
1645.type aes128gcmsiv_ecb_enc_block,@function
1646.align 16
1647aes128gcmsiv_ecb_enc_block:
1648.cfi_startproc
1649 vmovdqa (%rdi),%xmm1
1650
1651 vpxor (%rdx),%xmm1,%xmm1
1652 vaesenc 16(%rdx),%xmm1,%xmm1
1653 vaesenc 32(%rdx),%xmm1,%xmm1
1654 vaesenc 48(%rdx),%xmm1,%xmm1
1655 vaesenc 64(%rdx),%xmm1,%xmm1
1656 vaesenc 80(%rdx),%xmm1,%xmm1
1657 vaesenc 96(%rdx),%xmm1,%xmm1
1658 vaesenc 112(%rdx),%xmm1,%xmm1
1659 vaesenc 128(%rdx),%xmm1,%xmm1
1660 vaesenc 144(%rdx),%xmm1,%xmm1
1661 vaesenclast 160(%rdx),%xmm1,%xmm1
1662
1663 vmovdqa %xmm1,(%rsi)
1664
1665 .byte 0xf3,0xc3
1666.cfi_endproc
1667.size aes128gcmsiv_ecb_enc_block,.-aes128gcmsiv_ecb_enc_block
1668.globl aes256gcmsiv_aes_ks_enc_x1
1669.hidden aes256gcmsiv_aes_ks_enc_x1
1670.type aes256gcmsiv_aes_ks_enc_x1,@function
1671.align 16
1672aes256gcmsiv_aes_ks_enc_x1:
1673.cfi_startproc
1674 vmovdqa con1(%rip),%xmm0
1675 vmovdqa mask(%rip),%xmm15
1676 vmovdqa (%rdi),%xmm8
1677 vmovdqa (%rcx),%xmm1
1678 vmovdqa 16(%rcx),%xmm3
1679 vpxor %xmm1,%xmm8,%xmm8
1680 vaesenc %xmm3,%xmm8,%xmm8
1681 vmovdqu %xmm1,(%rdx)
1682 vmovdqu %xmm3,16(%rdx)
1683 vpxor %xmm14,%xmm14,%xmm14
1684
1685 vpshufb %xmm15,%xmm3,%xmm2
1686 vaesenclast %xmm0,%xmm2,%xmm2
1687 vpslld $1,%xmm0,%xmm0
1688 vpslldq $4,%xmm1,%xmm4
1689 vpxor %xmm4,%xmm1,%xmm1
1690 vpslldq $4,%xmm4,%xmm4
1691 vpxor %xmm4,%xmm1,%xmm1
1692 vpslldq $4,%xmm4,%xmm4
1693 vpxor %xmm4,%xmm1,%xmm1
1694 vpxor %xmm2,%xmm1,%xmm1
1695 vaesenc %xmm1,%xmm8,%xmm8
1696 vmovdqu %xmm1,32(%rdx)
1697
1698 vpshufd $0xff,%xmm1,%xmm2
1699 vaesenclast %xmm14,%xmm2,%xmm2
1700 vpslldq $4,%xmm3,%xmm4
1701 vpxor %xmm4,%xmm3,%xmm3
1702 vpslldq $4,%xmm4,%xmm4
1703 vpxor %xmm4,%xmm3,%xmm3
1704 vpslldq $4,%xmm4,%xmm4
1705 vpxor %xmm4,%xmm3,%xmm3
1706 vpxor %xmm2,%xmm3,%xmm3
1707 vaesenc %xmm3,%xmm8,%xmm8
1708 vmovdqu %xmm3,48(%rdx)
1709
1710 vpshufb %xmm15,%xmm3,%xmm2
1711 vaesenclast %xmm0,%xmm2,%xmm2
1712 vpslld $1,%xmm0,%xmm0
1713 vpslldq $4,%xmm1,%xmm4
1714 vpxor %xmm4,%xmm1,%xmm1
1715 vpslldq $4,%xmm4,%xmm4
1716 vpxor %xmm4,%xmm1,%xmm1
1717 vpslldq $4,%xmm4,%xmm4
1718 vpxor %xmm4,%xmm1,%xmm1
1719 vpxor %xmm2,%xmm1,%xmm1
1720 vaesenc %xmm1,%xmm8,%xmm8
1721 vmovdqu %xmm1,64(%rdx)
1722
1723 vpshufd $0xff,%xmm1,%xmm2
1724 vaesenclast %xmm14,%xmm2,%xmm2
1725 vpslldq $4,%xmm3,%xmm4
1726 vpxor %xmm4,%xmm3,%xmm3
1727 vpslldq $4,%xmm4,%xmm4
1728 vpxor %xmm4,%xmm3,%xmm3
1729 vpslldq $4,%xmm4,%xmm4
1730 vpxor %xmm4,%xmm3,%xmm3
1731 vpxor %xmm2,%xmm3,%xmm3
1732 vaesenc %xmm3,%xmm8,%xmm8
1733 vmovdqu %xmm3,80(%rdx)
1734
1735 vpshufb %xmm15,%xmm3,%xmm2
1736 vaesenclast %xmm0,%xmm2,%xmm2
1737 vpslld $1,%xmm0,%xmm0
1738 vpslldq $4,%xmm1,%xmm4
1739 vpxor %xmm4,%xmm1,%xmm1
1740 vpslldq $4,%xmm4,%xmm4
1741 vpxor %xmm4,%xmm1,%xmm1
1742 vpslldq $4,%xmm4,%xmm4
1743 vpxor %xmm4,%xmm1,%xmm1
1744 vpxor %xmm2,%xmm1,%xmm1
1745 vaesenc %xmm1,%xmm8,%xmm8
1746 vmovdqu %xmm1,96(%rdx)
1747
1748 vpshufd $0xff,%xmm1,%xmm2
1749 vaesenclast %xmm14,%xmm2,%xmm2
1750 vpslldq $4,%xmm3,%xmm4
1751 vpxor %xmm4,%xmm3,%xmm3
1752 vpslldq $4,%xmm4,%xmm4
1753 vpxor %xmm4,%xmm3,%xmm3
1754 vpslldq $4,%xmm4,%xmm4
1755 vpxor %xmm4,%xmm3,%xmm3
1756 vpxor %xmm2,%xmm3,%xmm3
1757 vaesenc %xmm3,%xmm8,%xmm8
1758 vmovdqu %xmm3,112(%rdx)
1759
1760 vpshufb %xmm15,%xmm3,%xmm2
1761 vaesenclast %xmm0,%xmm2,%xmm2
1762 vpslld $1,%xmm0,%xmm0
1763 vpslldq $4,%xmm1,%xmm4
1764 vpxor %xmm4,%xmm1,%xmm1
1765 vpslldq $4,%xmm4,%xmm4
1766 vpxor %xmm4,%xmm1,%xmm1
1767 vpslldq $4,%xmm4,%xmm4
1768 vpxor %xmm4,%xmm1,%xmm1
1769 vpxor %xmm2,%xmm1,%xmm1
1770 vaesenc %xmm1,%xmm8,%xmm8
1771 vmovdqu %xmm1,128(%rdx)
1772
1773 vpshufd $0xff,%xmm1,%xmm2
1774 vaesenclast %xmm14,%xmm2,%xmm2
1775 vpslldq $4,%xmm3,%xmm4
1776 vpxor %xmm4,%xmm3,%xmm3
1777 vpslldq $4,%xmm4,%xmm4
1778 vpxor %xmm4,%xmm3,%xmm3
1779 vpslldq $4,%xmm4,%xmm4
1780 vpxor %xmm4,%xmm3,%xmm3
1781 vpxor %xmm2,%xmm3,%xmm3
1782 vaesenc %xmm3,%xmm8,%xmm8
1783 vmovdqu %xmm3,144(%rdx)
1784
1785 vpshufb %xmm15,%xmm3,%xmm2
1786 vaesenclast %xmm0,%xmm2,%xmm2
1787 vpslld $1,%xmm0,%xmm0
1788 vpslldq $4,%xmm1,%xmm4
1789 vpxor %xmm4,%xmm1,%xmm1
1790 vpslldq $4,%xmm4,%xmm4
1791 vpxor %xmm4,%xmm1,%xmm1
1792 vpslldq $4,%xmm4,%xmm4
1793 vpxor %xmm4,%xmm1,%xmm1
1794 vpxor %xmm2,%xmm1,%xmm1
1795 vaesenc %xmm1,%xmm8,%xmm8
1796 vmovdqu %xmm1,160(%rdx)
1797
1798 vpshufd $0xff,%xmm1,%xmm2
1799 vaesenclast %xmm14,%xmm2,%xmm2
1800 vpslldq $4,%xmm3,%xmm4
1801 vpxor %xmm4,%xmm3,%xmm3
1802 vpslldq $4,%xmm4,%xmm4
1803 vpxor %xmm4,%xmm3,%xmm3
1804 vpslldq $4,%xmm4,%xmm4
1805 vpxor %xmm4,%xmm3,%xmm3
1806 vpxor %xmm2,%xmm3,%xmm3
1807 vaesenc %xmm3,%xmm8,%xmm8
1808 vmovdqu %xmm3,176(%rdx)
1809
1810 vpshufb %xmm15,%xmm3,%xmm2
1811 vaesenclast %xmm0,%xmm2,%xmm2
1812 vpslld $1,%xmm0,%xmm0
1813 vpslldq $4,%xmm1,%xmm4
1814 vpxor %xmm4,%xmm1,%xmm1
1815 vpslldq $4,%xmm4,%xmm4
1816 vpxor %xmm4,%xmm1,%xmm1
1817 vpslldq $4,%xmm4,%xmm4
1818 vpxor %xmm4,%xmm1,%xmm1
1819 vpxor %xmm2,%xmm1,%xmm1
1820 vaesenc %xmm1,%xmm8,%xmm8
1821 vmovdqu %xmm1,192(%rdx)
1822
1823 vpshufd $0xff,%xmm1,%xmm2
1824 vaesenclast %xmm14,%xmm2,%xmm2
1825 vpslldq $4,%xmm3,%xmm4
1826 vpxor %xmm4,%xmm3,%xmm3
1827 vpslldq $4,%xmm4,%xmm4
1828 vpxor %xmm4,%xmm3,%xmm3
1829 vpslldq $4,%xmm4,%xmm4
1830 vpxor %xmm4,%xmm3,%xmm3
1831 vpxor %xmm2,%xmm3,%xmm3
1832 vaesenc %xmm3,%xmm8,%xmm8
1833 vmovdqu %xmm3,208(%rdx)
1834
1835 vpshufb %xmm15,%xmm3,%xmm2
1836 vaesenclast %xmm0,%xmm2,%xmm2
1837 vpslldq $4,%xmm1,%xmm4
1838 vpxor %xmm4,%xmm1,%xmm1
1839 vpslldq $4,%xmm4,%xmm4
1840 vpxor %xmm4,%xmm1,%xmm1
1841 vpslldq $4,%xmm4,%xmm4
1842 vpxor %xmm4,%xmm1,%xmm1
1843 vpxor %xmm2,%xmm1,%xmm1
1844 vaesenclast %xmm1,%xmm8,%xmm8
1845 vmovdqu %xmm1,224(%rdx)
1846
1847 vmovdqa %xmm8,(%rsi)
1848 .byte 0xf3,0xc3
1849.cfi_endproc
1850.size aes256gcmsiv_aes_ks_enc_x1,.-aes256gcmsiv_aes_ks_enc_x1
1851.globl aes256gcmsiv_ecb_enc_block
1852.hidden aes256gcmsiv_ecb_enc_block
1853.type aes256gcmsiv_ecb_enc_block,@function
1854.align 16
1855aes256gcmsiv_ecb_enc_block:
1856.cfi_startproc
1857 vmovdqa (%rdi),%xmm1
1858 vpxor (%rdx),%xmm1,%xmm1
1859 vaesenc 16(%rdx),%xmm1,%xmm1
1860 vaesenc 32(%rdx),%xmm1,%xmm1
1861 vaesenc 48(%rdx),%xmm1,%xmm1
1862 vaesenc 64(%rdx),%xmm1,%xmm1
1863 vaesenc 80(%rdx),%xmm1,%xmm1
1864 vaesenc 96(%rdx),%xmm1,%xmm1
1865 vaesenc 112(%rdx),%xmm1,%xmm1
1866 vaesenc 128(%rdx),%xmm1,%xmm1
1867 vaesenc 144(%rdx),%xmm1,%xmm1
1868 vaesenc 160(%rdx),%xmm1,%xmm1
1869 vaesenc 176(%rdx),%xmm1,%xmm1
1870 vaesenc 192(%rdx),%xmm1,%xmm1
1871 vaesenc 208(%rdx),%xmm1,%xmm1
1872 vaesenclast 224(%rdx),%xmm1,%xmm1
1873 vmovdqa %xmm1,(%rsi)
1874 .byte 0xf3,0xc3
1875.cfi_endproc
1876.size aes256gcmsiv_ecb_enc_block,.-aes256gcmsiv_ecb_enc_block
1877.globl aes256gcmsiv_enc_msg_x4
1878.hidden aes256gcmsiv_enc_msg_x4
1879.type aes256gcmsiv_enc_msg_x4,@function
1880.align 16
1881aes256gcmsiv_enc_msg_x4:
1882.cfi_startproc
1883 testq %r8,%r8
1884 jnz .L256_enc_msg_x4_start
1885 .byte 0xf3,0xc3
1886
1887.L256_enc_msg_x4_start:
1888 movq %r8,%r10
1889 shrq $4,%r8
1890 shlq $60,%r10
1891 jz .L256_enc_msg_x4_start2
1892 addq $1,%r8
1893
1894.L256_enc_msg_x4_start2:
1895 movq %r8,%r10
1896 shlq $62,%r10
1897 shrq $62,%r10
1898
1899
1900 vmovdqa (%rdx),%xmm15
1901 vpor OR_MASK(%rip),%xmm15,%xmm15
1902
1903 vmovdqa four(%rip),%xmm4
1904 vmovdqa %xmm15,%xmm0
1905 vpaddd one(%rip),%xmm15,%xmm1
1906 vpaddd two(%rip),%xmm15,%xmm2
1907 vpaddd three(%rip),%xmm15,%xmm3
1908
1909 shrq $2,%r8
1910 je .L256_enc_msg_x4_check_remainder
1911
1912 subq $64,%rsi
1913 subq $64,%rdi
1914
1915.L256_enc_msg_x4_loop1:
1916 addq $64,%rsi
1917 addq $64,%rdi
1918
1919 vmovdqa %xmm0,%xmm5
1920 vmovdqa %xmm1,%xmm6
1921 vmovdqa %xmm2,%xmm7
1922 vmovdqa %xmm3,%xmm8
1923
1924 vpxor (%rcx),%xmm5,%xmm5
1925 vpxor (%rcx),%xmm6,%xmm6
1926 vpxor (%rcx),%xmm7,%xmm7
1927 vpxor (%rcx),%xmm8,%xmm8
1928
1929 vmovdqu 16(%rcx),%xmm12
1930 vaesenc %xmm12,%xmm5,%xmm5
1931 vaesenc %xmm12,%xmm6,%xmm6
1932 vaesenc %xmm12,%xmm7,%xmm7
1933 vaesenc %xmm12,%xmm8,%xmm8
1934
1935 vpaddd %xmm4,%xmm0,%xmm0
1936 vmovdqu 32(%rcx),%xmm12
1937 vaesenc %xmm12,%xmm5,%xmm5
1938 vaesenc %xmm12,%xmm6,%xmm6
1939 vaesenc %xmm12,%xmm7,%xmm7
1940 vaesenc %xmm12,%xmm8,%xmm8
1941
1942 vpaddd %xmm4,%xmm1,%xmm1
1943 vmovdqu 48(%rcx),%xmm12
1944 vaesenc %xmm12,%xmm5,%xmm5
1945 vaesenc %xmm12,%xmm6,%xmm6
1946 vaesenc %xmm12,%xmm7,%xmm7
1947 vaesenc %xmm12,%xmm8,%xmm8
1948
1949 vpaddd %xmm4,%xmm2,%xmm2
1950 vmovdqu 64(%rcx),%xmm12
1951 vaesenc %xmm12,%xmm5,%xmm5
1952 vaesenc %xmm12,%xmm6,%xmm6
1953 vaesenc %xmm12,%xmm7,%xmm7
1954 vaesenc %xmm12,%xmm8,%xmm8
1955
1956 vpaddd %xmm4,%xmm3,%xmm3
1957
1958 vmovdqu 80(%rcx),%xmm12
1959 vaesenc %xmm12,%xmm5,%xmm5
1960 vaesenc %xmm12,%xmm6,%xmm6
1961 vaesenc %xmm12,%xmm7,%xmm7
1962 vaesenc %xmm12,%xmm8,%xmm8
1963
1964 vmovdqu 96(%rcx),%xmm12
1965 vaesenc %xmm12,%xmm5,%xmm5
1966 vaesenc %xmm12,%xmm6,%xmm6
1967 vaesenc %xmm12,%xmm7,%xmm7
1968 vaesenc %xmm12,%xmm8,%xmm8
1969
1970 vmovdqu 112(%rcx),%xmm12
1971 vaesenc %xmm12,%xmm5,%xmm5
1972 vaesenc %xmm12,%xmm6,%xmm6
1973 vaesenc %xmm12,%xmm7,%xmm7
1974 vaesenc %xmm12,%xmm8,%xmm8
1975
1976 vmovdqu 128(%rcx),%xmm12
1977 vaesenc %xmm12,%xmm5,%xmm5
1978 vaesenc %xmm12,%xmm6,%xmm6
1979 vaesenc %xmm12,%xmm7,%xmm7
1980 vaesenc %xmm12,%xmm8,%xmm8
1981
1982 vmovdqu 144(%rcx),%xmm12
1983 vaesenc %xmm12,%xmm5,%xmm5
1984 vaesenc %xmm12,%xmm6,%xmm6
1985 vaesenc %xmm12,%xmm7,%xmm7
1986 vaesenc %xmm12,%xmm8,%xmm8
1987
1988 vmovdqu 160(%rcx),%xmm12
1989 vaesenc %xmm12,%xmm5,%xmm5
1990 vaesenc %xmm12,%xmm6,%xmm6
1991 vaesenc %xmm12,%xmm7,%xmm7
1992 vaesenc %xmm12,%xmm8,%xmm8
1993
1994 vmovdqu 176(%rcx),%xmm12
1995 vaesenc %xmm12,%xmm5,%xmm5
1996 vaesenc %xmm12,%xmm6,%xmm6
1997 vaesenc %xmm12,%xmm7,%xmm7
1998 vaesenc %xmm12,%xmm8,%xmm8
1999
2000 vmovdqu 192(%rcx),%xmm12
2001 vaesenc %xmm12,%xmm5,%xmm5
2002 vaesenc %xmm12,%xmm6,%xmm6
2003 vaesenc %xmm12,%xmm7,%xmm7
2004 vaesenc %xmm12,%xmm8,%xmm8
2005
2006 vmovdqu 208(%rcx),%xmm12
2007 vaesenc %xmm12,%xmm5,%xmm5
2008 vaesenc %xmm12,%xmm6,%xmm6
2009 vaesenc %xmm12,%xmm7,%xmm7
2010 vaesenc %xmm12,%xmm8,%xmm8
2011
2012 vmovdqu 224(%rcx),%xmm12
2013 vaesenclast %xmm12,%xmm5,%xmm5
2014 vaesenclast %xmm12,%xmm6,%xmm6
2015 vaesenclast %xmm12,%xmm7,%xmm7
2016 vaesenclast %xmm12,%xmm8,%xmm8
2017
2018
2019
2020 vpxor 0(%rdi),%xmm5,%xmm5
2021 vpxor 16(%rdi),%xmm6,%xmm6
2022 vpxor 32(%rdi),%xmm7,%xmm7
2023 vpxor 48(%rdi),%xmm8,%xmm8
2024
2025 subq $1,%r8
2026
2027 vmovdqu %xmm5,0(%rsi)
2028 vmovdqu %xmm6,16(%rsi)
2029 vmovdqu %xmm7,32(%rsi)
2030 vmovdqu %xmm8,48(%rsi)
2031
2032 jne .L256_enc_msg_x4_loop1
2033
2034 addq $64,%rsi
2035 addq $64,%rdi
2036
2037.L256_enc_msg_x4_check_remainder:
2038 cmpq $0,%r10
2039 je .L256_enc_msg_x4_out
2040
2041.L256_enc_msg_x4_loop2:
2042
2043
2044
2045 vmovdqa %xmm0,%xmm5
2046 vpaddd one(%rip),%xmm0,%xmm0
2047 vpxor (%rcx),%xmm5,%xmm5
2048 vaesenc 16(%rcx),%xmm5,%xmm5
2049 vaesenc 32(%rcx),%xmm5,%xmm5
2050 vaesenc 48(%rcx),%xmm5,%xmm5
2051 vaesenc 64(%rcx),%xmm5,%xmm5
2052 vaesenc 80(%rcx),%xmm5,%xmm5
2053 vaesenc 96(%rcx),%xmm5,%xmm5
2054 vaesenc 112(%rcx),%xmm5,%xmm5
2055 vaesenc 128(%rcx),%xmm5,%xmm5
2056 vaesenc 144(%rcx),%xmm5,%xmm5
2057 vaesenc 160(%rcx),%xmm5,%xmm5
2058 vaesenc 176(%rcx),%xmm5,%xmm5
2059 vaesenc 192(%rcx),%xmm5,%xmm5
2060 vaesenc 208(%rcx),%xmm5,%xmm5
2061 vaesenclast 224(%rcx),%xmm5,%xmm5
2062
2063
2064 vpxor (%rdi),%xmm5,%xmm5
2065
2066 vmovdqu %xmm5,(%rsi)
2067
2068 addq $16,%rdi
2069 addq $16,%rsi
2070
2071 subq $1,%r10
2072 jne .L256_enc_msg_x4_loop2
2073
2074.L256_enc_msg_x4_out:
2075 .byte 0xf3,0xc3
2076.cfi_endproc
2077.size aes256gcmsiv_enc_msg_x4,.-aes256gcmsiv_enc_msg_x4
2078.globl aes256gcmsiv_enc_msg_x8
2079.hidden aes256gcmsiv_enc_msg_x8
2080.type aes256gcmsiv_enc_msg_x8,@function
2081.align 16
2082aes256gcmsiv_enc_msg_x8:
2083.cfi_startproc
2084 testq %r8,%r8
2085 jnz .L256_enc_msg_x8_start
2086 .byte 0xf3,0xc3
2087
2088.L256_enc_msg_x8_start:
2089
2090 movq %rsp,%r11
2091 subq $16,%r11
2092 andq $-64,%r11
2093
2094 movq %r8,%r10
2095 shrq $4,%r8
2096 shlq $60,%r10
2097 jz .L256_enc_msg_x8_start2
2098 addq $1,%r8
2099
2100.L256_enc_msg_x8_start2:
2101 movq %r8,%r10
2102 shlq $61,%r10
2103 shrq $61,%r10
2104
2105
2106 vmovdqa (%rdx),%xmm1
2107 vpor OR_MASK(%rip),%xmm1,%xmm1
2108
2109
2110 vpaddd seven(%rip),%xmm1,%xmm0
2111 vmovdqa %xmm0,(%r11)
2112 vpaddd one(%rip),%xmm1,%xmm9
2113 vpaddd two(%rip),%xmm1,%xmm10
2114 vpaddd three(%rip),%xmm1,%xmm11
2115 vpaddd four(%rip),%xmm1,%xmm12
2116 vpaddd five(%rip),%xmm1,%xmm13
2117 vpaddd six(%rip),%xmm1,%xmm14
2118 vmovdqa %xmm1,%xmm0
2119
2120 shrq $3,%r8
2121 jz .L256_enc_msg_x8_check_remainder
2122
2123 subq $128,%rsi
2124 subq $128,%rdi
2125
2126.L256_enc_msg_x8_loop1:
2127 addq $128,%rsi
2128 addq $128,%rdi
2129
2130 vmovdqa %xmm0,%xmm1
2131 vmovdqa %xmm9,%xmm2
2132 vmovdqa %xmm10,%xmm3
2133 vmovdqa %xmm11,%xmm4
2134 vmovdqa %xmm12,%xmm5
2135 vmovdqa %xmm13,%xmm6
2136 vmovdqa %xmm14,%xmm7
2137
2138 vmovdqa (%r11),%xmm8
2139
2140 vpxor (%rcx),%xmm1,%xmm1
2141 vpxor (%rcx),%xmm2,%xmm2
2142 vpxor (%rcx),%xmm3,%xmm3
2143 vpxor (%rcx),%xmm4,%xmm4
2144 vpxor (%rcx),%xmm5,%xmm5
2145 vpxor (%rcx),%xmm6,%xmm6
2146 vpxor (%rcx),%xmm7,%xmm7
2147 vpxor (%rcx),%xmm8,%xmm8
2148
2149 vmovdqu 16(%rcx),%xmm15
2150 vaesenc %xmm15,%xmm1,%xmm1
2151 vaesenc %xmm15,%xmm2,%xmm2
2152 vaesenc %xmm15,%xmm3,%xmm3
2153 vaesenc %xmm15,%xmm4,%xmm4
2154 vaesenc %xmm15,%xmm5,%xmm5
2155 vaesenc %xmm15,%xmm6,%xmm6
2156 vaesenc %xmm15,%xmm7,%xmm7
2157 vaesenc %xmm15,%xmm8,%xmm8
2158
2159 vmovdqa (%r11),%xmm14
2160 vpaddd eight(%rip),%xmm14,%xmm14
2161 vmovdqa %xmm14,(%r11)
2162 vmovdqu 32(%rcx),%xmm15
2163 vaesenc %xmm15,%xmm1,%xmm1
2164 vaesenc %xmm15,%xmm2,%xmm2
2165 vaesenc %xmm15,%xmm3,%xmm3
2166 vaesenc %xmm15,%xmm4,%xmm4
2167 vaesenc %xmm15,%xmm5,%xmm5
2168 vaesenc %xmm15,%xmm6,%xmm6
2169 vaesenc %xmm15,%xmm7,%xmm7
2170 vaesenc %xmm15,%xmm8,%xmm8
2171
2172 vpsubd one(%rip),%xmm14,%xmm14
2173 vmovdqu 48(%rcx),%xmm15
2174 vaesenc %xmm15,%xmm1,%xmm1
2175 vaesenc %xmm15,%xmm2,%xmm2
2176 vaesenc %xmm15,%xmm3,%xmm3
2177 vaesenc %xmm15,%xmm4,%xmm4
2178 vaesenc %xmm15,%xmm5,%xmm5
2179 vaesenc %xmm15,%xmm6,%xmm6
2180 vaesenc %xmm15,%xmm7,%xmm7
2181 vaesenc %xmm15,%xmm8,%xmm8
2182
2183 vpaddd eight(%rip),%xmm0,%xmm0
2184 vmovdqu 64(%rcx),%xmm15
2185 vaesenc %xmm15,%xmm1,%xmm1
2186 vaesenc %xmm15,%xmm2,%xmm2
2187 vaesenc %xmm15,%xmm3,%xmm3
2188 vaesenc %xmm15,%xmm4,%xmm4
2189 vaesenc %xmm15,%xmm5,%xmm5
2190 vaesenc %xmm15,%xmm6,%xmm6
2191 vaesenc %xmm15,%xmm7,%xmm7
2192 vaesenc %xmm15,%xmm8,%xmm8
2193
2194 vpaddd eight(%rip),%xmm9,%xmm9
2195 vmovdqu 80(%rcx),%xmm15
2196 vaesenc %xmm15,%xmm1,%xmm1
2197 vaesenc %xmm15,%xmm2,%xmm2
2198 vaesenc %xmm15,%xmm3,%xmm3
2199 vaesenc %xmm15,%xmm4,%xmm4
2200 vaesenc %xmm15,%xmm5,%xmm5
2201 vaesenc %xmm15,%xmm6,%xmm6
2202 vaesenc %xmm15,%xmm7,%xmm7
2203 vaesenc %xmm15,%xmm8,%xmm8
2204
2205 vpaddd eight(%rip),%xmm10,%xmm10
2206 vmovdqu 96(%rcx),%xmm15
2207 vaesenc %xmm15,%xmm1,%xmm1
2208 vaesenc %xmm15,%xmm2,%xmm2
2209 vaesenc %xmm15,%xmm3,%xmm3
2210 vaesenc %xmm15,%xmm4,%xmm4
2211 vaesenc %xmm15,%xmm5,%xmm5
2212 vaesenc %xmm15,%xmm6,%xmm6
2213 vaesenc %xmm15,%xmm7,%xmm7
2214 vaesenc %xmm15,%xmm8,%xmm8
2215
2216 vpaddd eight(%rip),%xmm11,%xmm11
2217 vmovdqu 112(%rcx),%xmm15
2218 vaesenc %xmm15,%xmm1,%xmm1
2219 vaesenc %xmm15,%xmm2,%xmm2
2220 vaesenc %xmm15,%xmm3,%xmm3
2221 vaesenc %xmm15,%xmm4,%xmm4
2222 vaesenc %xmm15,%xmm5,%xmm5
2223 vaesenc %xmm15,%xmm6,%xmm6
2224 vaesenc %xmm15,%xmm7,%xmm7
2225 vaesenc %xmm15,%xmm8,%xmm8
2226
2227 vpaddd eight(%rip),%xmm12,%xmm12
2228 vmovdqu 128(%rcx),%xmm15
2229 vaesenc %xmm15,%xmm1,%xmm1
2230 vaesenc %xmm15,%xmm2,%xmm2
2231 vaesenc %xmm15,%xmm3,%xmm3
2232 vaesenc %xmm15,%xmm4,%xmm4
2233 vaesenc %xmm15,%xmm5,%xmm5
2234 vaesenc %xmm15,%xmm6,%xmm6
2235 vaesenc %xmm15,%xmm7,%xmm7
2236 vaesenc %xmm15,%xmm8,%xmm8
2237
2238 vpaddd eight(%rip),%xmm13,%xmm13
2239 vmovdqu 144(%rcx),%xmm15
2240 vaesenc %xmm15,%xmm1,%xmm1
2241 vaesenc %xmm15,%xmm2,%xmm2
2242 vaesenc %xmm15,%xmm3,%xmm3
2243 vaesenc %xmm15,%xmm4,%xmm4
2244 vaesenc %xmm15,%xmm5,%xmm5
2245 vaesenc %xmm15,%xmm6,%xmm6
2246 vaesenc %xmm15,%xmm7,%xmm7
2247 vaesenc %xmm15,%xmm8,%xmm8
2248
2249 vmovdqu 160(%rcx),%xmm15
2250 vaesenc %xmm15,%xmm1,%xmm1
2251 vaesenc %xmm15,%xmm2,%xmm2
2252 vaesenc %xmm15,%xmm3,%xmm3
2253 vaesenc %xmm15,%xmm4,%xmm4
2254 vaesenc %xmm15,%xmm5,%xmm5
2255 vaesenc %xmm15,%xmm6,%xmm6
2256 vaesenc %xmm15,%xmm7,%xmm7
2257 vaesenc %xmm15,%xmm8,%xmm8
2258
2259 vmovdqu 176(%rcx),%xmm15
2260 vaesenc %xmm15,%xmm1,%xmm1
2261 vaesenc %xmm15,%xmm2,%xmm2
2262 vaesenc %xmm15,%xmm3,%xmm3
2263 vaesenc %xmm15,%xmm4,%xmm4
2264 vaesenc %xmm15,%xmm5,%xmm5
2265 vaesenc %xmm15,%xmm6,%xmm6
2266 vaesenc %xmm15,%xmm7,%xmm7
2267 vaesenc %xmm15,%xmm8,%xmm8
2268
2269 vmovdqu 192(%rcx),%xmm15
2270 vaesenc %xmm15,%xmm1,%xmm1
2271 vaesenc %xmm15,%xmm2,%xmm2
2272 vaesenc %xmm15,%xmm3,%xmm3
2273 vaesenc %xmm15,%xmm4,%xmm4
2274 vaesenc %xmm15,%xmm5,%xmm5
2275 vaesenc %xmm15,%xmm6,%xmm6
2276 vaesenc %xmm15,%xmm7,%xmm7
2277 vaesenc %xmm15,%xmm8,%xmm8
2278
2279 vmovdqu 208(%rcx),%xmm15
2280 vaesenc %xmm15,%xmm1,%xmm1
2281 vaesenc %xmm15,%xmm2,%xmm2
2282 vaesenc %xmm15,%xmm3,%xmm3
2283 vaesenc %xmm15,%xmm4,%xmm4
2284 vaesenc %xmm15,%xmm5,%xmm5
2285 vaesenc %xmm15,%xmm6,%xmm6
2286 vaesenc %xmm15,%xmm7,%xmm7
2287 vaesenc %xmm15,%xmm8,%xmm8
2288
2289 vmovdqu 224(%rcx),%xmm15
2290 vaesenclast %xmm15,%xmm1,%xmm1
2291 vaesenclast %xmm15,%xmm2,%xmm2
2292 vaesenclast %xmm15,%xmm3,%xmm3
2293 vaesenclast %xmm15,%xmm4,%xmm4
2294 vaesenclast %xmm15,%xmm5,%xmm5
2295 vaesenclast %xmm15,%xmm6,%xmm6
2296 vaesenclast %xmm15,%xmm7,%xmm7
2297 vaesenclast %xmm15,%xmm8,%xmm8
2298
2299
2300
2301 vpxor 0(%rdi),%xmm1,%xmm1
2302 vpxor 16(%rdi),%xmm2,%xmm2
2303 vpxor 32(%rdi),%xmm3,%xmm3
2304 vpxor 48(%rdi),%xmm4,%xmm4
2305 vpxor 64(%rdi),%xmm5,%xmm5
2306 vpxor 80(%rdi),%xmm6,%xmm6
2307 vpxor 96(%rdi),%xmm7,%xmm7
2308 vpxor 112(%rdi),%xmm8,%xmm8
2309
2310 subq $1,%r8
2311
2312 vmovdqu %xmm1,0(%rsi)
2313 vmovdqu %xmm2,16(%rsi)
2314 vmovdqu %xmm3,32(%rsi)
2315 vmovdqu %xmm4,48(%rsi)
2316 vmovdqu %xmm5,64(%rsi)
2317 vmovdqu %xmm6,80(%rsi)
2318 vmovdqu %xmm7,96(%rsi)
2319 vmovdqu %xmm8,112(%rsi)
2320
2321 jne .L256_enc_msg_x8_loop1
2322
2323 addq $128,%rsi
2324 addq $128,%rdi
2325
2326.L256_enc_msg_x8_check_remainder:
2327 cmpq $0,%r10
2328 je .L256_enc_msg_x8_out
2329
2330.L256_enc_msg_x8_loop2:
2331
2332
2333 vmovdqa %xmm0,%xmm1
2334 vpaddd one(%rip),%xmm0,%xmm0
2335
2336 vpxor (%rcx),%xmm1,%xmm1
2337 vaesenc 16(%rcx),%xmm1,%xmm1
2338 vaesenc 32(%rcx),%xmm1,%xmm1
2339 vaesenc 48(%rcx),%xmm1,%xmm1
2340 vaesenc 64(%rcx),%xmm1,%xmm1
2341 vaesenc 80(%rcx),%xmm1,%xmm1
2342 vaesenc 96(%rcx),%xmm1,%xmm1
2343 vaesenc 112(%rcx),%xmm1,%xmm1
2344 vaesenc 128(%rcx),%xmm1,%xmm1
2345 vaesenc 144(%rcx),%xmm1,%xmm1
2346 vaesenc 160(%rcx),%xmm1,%xmm1
2347 vaesenc 176(%rcx),%xmm1,%xmm1
2348 vaesenc 192(%rcx),%xmm1,%xmm1
2349 vaesenc 208(%rcx),%xmm1,%xmm1
2350 vaesenclast 224(%rcx),%xmm1,%xmm1
2351
2352
2353 vpxor (%rdi),%xmm1,%xmm1
2354
2355 vmovdqu %xmm1,(%rsi)
2356
2357 addq $16,%rdi
2358 addq $16,%rsi
2359 subq $1,%r10
2360 jnz .L256_enc_msg_x8_loop2
2361
2362.L256_enc_msg_x8_out:
2363 .byte 0xf3,0xc3
2364
2365.cfi_endproc
2366.size aes256gcmsiv_enc_msg_x8,.-aes256gcmsiv_enc_msg_x8
2367.globl aes256gcmsiv_dec
2368.hidden aes256gcmsiv_dec
2369.type aes256gcmsiv_dec,@function
2370.align 16
2371aes256gcmsiv_dec:
2372.cfi_startproc
2373 testq $~15,%r9
2374 jnz .L256_dec_start
2375 .byte 0xf3,0xc3
2376
2377.L256_dec_start:
2378 vzeroupper
2379 vmovdqa (%rdx),%xmm0
2380 movq %rdx,%rax
2381
2382 leaq 32(%rax),%rax
2383 leaq 32(%rcx),%rcx
2384
2385
2386 vmovdqu (%rdi,%r9,1),%xmm15
2387 vpor OR_MASK(%rip),%xmm15,%xmm15
2388 andq $~15,%r9
2389
2390
2391 cmpq $96,%r9
2392 jb .L256_dec_loop2
2393
2394
2395 subq $96,%r9
2396 vmovdqa %xmm15,%xmm7
2397 vpaddd one(%rip),%xmm7,%xmm8
2398 vpaddd two(%rip),%xmm7,%xmm9
2399 vpaddd one(%rip),%xmm9,%xmm10
2400 vpaddd two(%rip),%xmm9,%xmm11
2401 vpaddd one(%rip),%xmm11,%xmm12
2402 vpaddd two(%rip),%xmm11,%xmm15
2403
2404 vpxor (%r8),%xmm7,%xmm7
2405 vpxor (%r8),%xmm8,%xmm8
2406 vpxor (%r8),%xmm9,%xmm9
2407 vpxor (%r8),%xmm10,%xmm10
2408 vpxor (%r8),%xmm11,%xmm11
2409 vpxor (%r8),%xmm12,%xmm12
2410
2411 vmovdqu 16(%r8),%xmm4
2412 vaesenc %xmm4,%xmm7,%xmm7
2413 vaesenc %xmm4,%xmm8,%xmm8
2414 vaesenc %xmm4,%xmm9,%xmm9
2415 vaesenc %xmm4,%xmm10,%xmm10
2416 vaesenc %xmm4,%xmm11,%xmm11
2417 vaesenc %xmm4,%xmm12,%xmm12
2418
2419 vmovdqu 32(%r8),%xmm4
2420 vaesenc %xmm4,%xmm7,%xmm7
2421 vaesenc %xmm4,%xmm8,%xmm8
2422 vaesenc %xmm4,%xmm9,%xmm9
2423 vaesenc %xmm4,%xmm10,%xmm10
2424 vaesenc %xmm4,%xmm11,%xmm11
2425 vaesenc %xmm4,%xmm12,%xmm12
2426
2427 vmovdqu 48(%r8),%xmm4
2428 vaesenc %xmm4,%xmm7,%xmm7
2429 vaesenc %xmm4,%xmm8,%xmm8
2430 vaesenc %xmm4,%xmm9,%xmm9
2431 vaesenc %xmm4,%xmm10,%xmm10
2432 vaesenc %xmm4,%xmm11,%xmm11
2433 vaesenc %xmm4,%xmm12,%xmm12
2434
2435 vmovdqu 64(%r8),%xmm4
2436 vaesenc %xmm4,%xmm7,%xmm7
2437 vaesenc %xmm4,%xmm8,%xmm8
2438 vaesenc %xmm4,%xmm9,%xmm9
2439 vaesenc %xmm4,%xmm10,%xmm10
2440 vaesenc %xmm4,%xmm11,%xmm11
2441 vaesenc %xmm4,%xmm12,%xmm12
2442
2443 vmovdqu 80(%r8),%xmm4
2444 vaesenc %xmm4,%xmm7,%xmm7
2445 vaesenc %xmm4,%xmm8,%xmm8
2446 vaesenc %xmm4,%xmm9,%xmm9
2447 vaesenc %xmm4,%xmm10,%xmm10
2448 vaesenc %xmm4,%xmm11,%xmm11
2449 vaesenc %xmm4,%xmm12,%xmm12
2450
2451 vmovdqu 96(%r8),%xmm4
2452 vaesenc %xmm4,%xmm7,%xmm7
2453 vaesenc %xmm4,%xmm8,%xmm8
2454 vaesenc %xmm4,%xmm9,%xmm9
2455 vaesenc %xmm4,%xmm10,%xmm10
2456 vaesenc %xmm4,%xmm11,%xmm11
2457 vaesenc %xmm4,%xmm12,%xmm12
2458
2459 vmovdqu 112(%r8),%xmm4
2460 vaesenc %xmm4,%xmm7,%xmm7
2461 vaesenc %xmm4,%xmm8,%xmm8
2462 vaesenc %xmm4,%xmm9,%xmm9
2463 vaesenc %xmm4,%xmm10,%xmm10
2464 vaesenc %xmm4,%xmm11,%xmm11
2465 vaesenc %xmm4,%xmm12,%xmm12
2466
2467 vmovdqu 128(%r8),%xmm4
2468 vaesenc %xmm4,%xmm7,%xmm7
2469 vaesenc %xmm4,%xmm8,%xmm8
2470 vaesenc %xmm4,%xmm9,%xmm9
2471 vaesenc %xmm4,%xmm10,%xmm10
2472 vaesenc %xmm4,%xmm11,%xmm11
2473 vaesenc %xmm4,%xmm12,%xmm12
2474
2475 vmovdqu 144(%r8),%xmm4
2476 vaesenc %xmm4,%xmm7,%xmm7
2477 vaesenc %xmm4,%xmm8,%xmm8
2478 vaesenc %xmm4,%xmm9,%xmm9
2479 vaesenc %xmm4,%xmm10,%xmm10
2480 vaesenc %xmm4,%xmm11,%xmm11
2481 vaesenc %xmm4,%xmm12,%xmm12
2482
2483 vmovdqu 160(%r8),%xmm4
2484 vaesenc %xmm4,%xmm7,%xmm7
2485 vaesenc %xmm4,%xmm8,%xmm8
2486 vaesenc %xmm4,%xmm9,%xmm9
2487 vaesenc %xmm4,%xmm10,%xmm10
2488 vaesenc %xmm4,%xmm11,%xmm11
2489 vaesenc %xmm4,%xmm12,%xmm12
2490
2491 vmovdqu 176(%r8),%xmm4
2492 vaesenc %xmm4,%xmm7,%xmm7
2493 vaesenc %xmm4,%xmm8,%xmm8
2494 vaesenc %xmm4,%xmm9,%xmm9
2495 vaesenc %xmm4,%xmm10,%xmm10
2496 vaesenc %xmm4,%xmm11,%xmm11
2497 vaesenc %xmm4,%xmm12,%xmm12
2498
2499 vmovdqu 192(%r8),%xmm4
2500 vaesenc %xmm4,%xmm7,%xmm7
2501 vaesenc %xmm4,%xmm8,%xmm8
2502 vaesenc %xmm4,%xmm9,%xmm9
2503 vaesenc %xmm4,%xmm10,%xmm10
2504 vaesenc %xmm4,%xmm11,%xmm11
2505 vaesenc %xmm4,%xmm12,%xmm12
2506
2507 vmovdqu 208(%r8),%xmm4
2508 vaesenc %xmm4,%xmm7,%xmm7
2509 vaesenc %xmm4,%xmm8,%xmm8
2510 vaesenc %xmm4,%xmm9,%xmm9
2511 vaesenc %xmm4,%xmm10,%xmm10
2512 vaesenc %xmm4,%xmm11,%xmm11
2513 vaesenc %xmm4,%xmm12,%xmm12
2514
2515 vmovdqu 224(%r8),%xmm4
2516 vaesenclast %xmm4,%xmm7,%xmm7
2517 vaesenclast %xmm4,%xmm8,%xmm8
2518 vaesenclast %xmm4,%xmm9,%xmm9
2519 vaesenclast %xmm4,%xmm10,%xmm10
2520 vaesenclast %xmm4,%xmm11,%xmm11
2521 vaesenclast %xmm4,%xmm12,%xmm12
2522
2523
2524 vpxor 0(%rdi),%xmm7,%xmm7
2525 vpxor 16(%rdi),%xmm8,%xmm8
2526 vpxor 32(%rdi),%xmm9,%xmm9
2527 vpxor 48(%rdi),%xmm10,%xmm10
2528 vpxor 64(%rdi),%xmm11,%xmm11
2529 vpxor 80(%rdi),%xmm12,%xmm12
2530
2531 vmovdqu %xmm7,0(%rsi)
2532 vmovdqu %xmm8,16(%rsi)
2533 vmovdqu %xmm9,32(%rsi)
2534 vmovdqu %xmm10,48(%rsi)
2535 vmovdqu %xmm11,64(%rsi)
2536 vmovdqu %xmm12,80(%rsi)
2537
2538 addq $96,%rdi
2539 addq $96,%rsi
2540 jmp .L256_dec_loop1
2541
2542
2543.align 64
2544.L256_dec_loop1:
2545 cmpq $96,%r9
2546 jb .L256_dec_finish_96
2547 subq $96,%r9
2548
2549 vmovdqa %xmm12,%xmm6
2550 vmovdqa %xmm11,16-32(%rax)
2551 vmovdqa %xmm10,32-32(%rax)
2552 vmovdqa %xmm9,48-32(%rax)
2553 vmovdqa %xmm8,64-32(%rax)
2554 vmovdqa %xmm7,80-32(%rax)
2555
2556 vmovdqa %xmm15,%xmm7
2557 vpaddd one(%rip),%xmm7,%xmm8
2558 vpaddd two(%rip),%xmm7,%xmm9
2559 vpaddd one(%rip),%xmm9,%xmm10
2560 vpaddd two(%rip),%xmm9,%xmm11
2561 vpaddd one(%rip),%xmm11,%xmm12
2562 vpaddd two(%rip),%xmm11,%xmm15
2563
2564 vmovdqa (%r8),%xmm4
2565 vpxor %xmm4,%xmm7,%xmm7
2566 vpxor %xmm4,%xmm8,%xmm8
2567 vpxor %xmm4,%xmm9,%xmm9
2568 vpxor %xmm4,%xmm10,%xmm10
2569 vpxor %xmm4,%xmm11,%xmm11
2570 vpxor %xmm4,%xmm12,%xmm12
2571
2572 vmovdqu 0-32(%rcx),%xmm4
2573 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2
2574 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3
2575 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm1
2576 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm4
2577 vpxor %xmm4,%xmm1,%xmm1
2578
2579 vmovdqu 16(%r8),%xmm4
2580 vaesenc %xmm4,%xmm7,%xmm7
2581 vaesenc %xmm4,%xmm8,%xmm8
2582 vaesenc %xmm4,%xmm9,%xmm9
2583 vaesenc %xmm4,%xmm10,%xmm10
2584 vaesenc %xmm4,%xmm11,%xmm11
2585 vaesenc %xmm4,%xmm12,%xmm12
2586
2587 vmovdqu -16(%rax),%xmm6
2588 vmovdqu -16(%rcx),%xmm13
2589
2590 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2591 vpxor %xmm4,%xmm1,%xmm1
2592 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2593 vpxor %xmm4,%xmm2,%xmm2
2594 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2595 vpxor %xmm4,%xmm3,%xmm3
2596 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2597 vpxor %xmm4,%xmm1,%xmm1
2598
2599
2600 vmovdqu 32(%r8),%xmm4
2601 vaesenc %xmm4,%xmm7,%xmm7
2602 vaesenc %xmm4,%xmm8,%xmm8
2603 vaesenc %xmm4,%xmm9,%xmm9
2604 vaesenc %xmm4,%xmm10,%xmm10
2605 vaesenc %xmm4,%xmm11,%xmm11
2606 vaesenc %xmm4,%xmm12,%xmm12
2607
2608 vmovdqu 0(%rax),%xmm6
2609 vmovdqu 0(%rcx),%xmm13
2610
2611 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2612 vpxor %xmm4,%xmm1,%xmm1
2613 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2614 vpxor %xmm4,%xmm2,%xmm2
2615 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2616 vpxor %xmm4,%xmm3,%xmm3
2617 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2618 vpxor %xmm4,%xmm1,%xmm1
2619
2620
2621 vmovdqu 48(%r8),%xmm4
2622 vaesenc %xmm4,%xmm7,%xmm7
2623 vaesenc %xmm4,%xmm8,%xmm8
2624 vaesenc %xmm4,%xmm9,%xmm9
2625 vaesenc %xmm4,%xmm10,%xmm10
2626 vaesenc %xmm4,%xmm11,%xmm11
2627 vaesenc %xmm4,%xmm12,%xmm12
2628
2629 vmovdqu 16(%rax),%xmm6
2630 vmovdqu 16(%rcx),%xmm13
2631
2632 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2633 vpxor %xmm4,%xmm1,%xmm1
2634 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2635 vpxor %xmm4,%xmm2,%xmm2
2636 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2637 vpxor %xmm4,%xmm3,%xmm3
2638 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2639 vpxor %xmm4,%xmm1,%xmm1
2640
2641
2642 vmovdqu 64(%r8),%xmm4
2643 vaesenc %xmm4,%xmm7,%xmm7
2644 vaesenc %xmm4,%xmm8,%xmm8
2645 vaesenc %xmm4,%xmm9,%xmm9
2646 vaesenc %xmm4,%xmm10,%xmm10
2647 vaesenc %xmm4,%xmm11,%xmm11
2648 vaesenc %xmm4,%xmm12,%xmm12
2649
2650 vmovdqu 32(%rax),%xmm6
2651 vmovdqu 32(%rcx),%xmm13
2652
2653 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2654 vpxor %xmm4,%xmm1,%xmm1
2655 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2656 vpxor %xmm4,%xmm2,%xmm2
2657 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2658 vpxor %xmm4,%xmm3,%xmm3
2659 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2660 vpxor %xmm4,%xmm1,%xmm1
2661
2662
2663 vmovdqu 80(%r8),%xmm4
2664 vaesenc %xmm4,%xmm7,%xmm7
2665 vaesenc %xmm4,%xmm8,%xmm8
2666 vaesenc %xmm4,%xmm9,%xmm9
2667 vaesenc %xmm4,%xmm10,%xmm10
2668 vaesenc %xmm4,%xmm11,%xmm11
2669 vaesenc %xmm4,%xmm12,%xmm12
2670
2671 vmovdqu 96(%r8),%xmm4
2672 vaesenc %xmm4,%xmm7,%xmm7
2673 vaesenc %xmm4,%xmm8,%xmm8
2674 vaesenc %xmm4,%xmm9,%xmm9
2675 vaesenc %xmm4,%xmm10,%xmm10
2676 vaesenc %xmm4,%xmm11,%xmm11
2677 vaesenc %xmm4,%xmm12,%xmm12
2678
2679 vmovdqu 112(%r8),%xmm4
2680 vaesenc %xmm4,%xmm7,%xmm7
2681 vaesenc %xmm4,%xmm8,%xmm8
2682 vaesenc %xmm4,%xmm9,%xmm9
2683 vaesenc %xmm4,%xmm10,%xmm10
2684 vaesenc %xmm4,%xmm11,%xmm11
2685 vaesenc %xmm4,%xmm12,%xmm12
2686
2687
2688 vmovdqa 80-32(%rax),%xmm6
2689 vpxor %xmm0,%xmm6,%xmm6
2690 vmovdqu 80-32(%rcx),%xmm5
2691
2692 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4
2693 vpxor %xmm4,%xmm1,%xmm1
2694 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4
2695 vpxor %xmm4,%xmm2,%xmm2
2696 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4
2697 vpxor %xmm4,%xmm3,%xmm3
2698 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4
2699 vpxor %xmm4,%xmm1,%xmm1
2700
2701 vmovdqu 128(%r8),%xmm4
2702 vaesenc %xmm4,%xmm7,%xmm7
2703 vaesenc %xmm4,%xmm8,%xmm8
2704 vaesenc %xmm4,%xmm9,%xmm9
2705 vaesenc %xmm4,%xmm10,%xmm10
2706 vaesenc %xmm4,%xmm11,%xmm11
2707 vaesenc %xmm4,%xmm12,%xmm12
2708
2709
2710 vpsrldq $8,%xmm1,%xmm4
2711 vpxor %xmm4,%xmm2,%xmm5
2712 vpslldq $8,%xmm1,%xmm4
2713 vpxor %xmm4,%xmm3,%xmm0
2714
2715 vmovdqa poly(%rip),%xmm3
2716
2717 vmovdqu 144(%r8),%xmm4
2718 vaesenc %xmm4,%xmm7,%xmm7
2719 vaesenc %xmm4,%xmm8,%xmm8
2720 vaesenc %xmm4,%xmm9,%xmm9
2721 vaesenc %xmm4,%xmm10,%xmm10
2722 vaesenc %xmm4,%xmm11,%xmm11
2723 vaesenc %xmm4,%xmm12,%xmm12
2724
2725 vmovdqu 160(%r8),%xmm4
2726 vaesenc %xmm4,%xmm7,%xmm7
2727 vaesenc %xmm4,%xmm8,%xmm8
2728 vaesenc %xmm4,%xmm9,%xmm9
2729 vaesenc %xmm4,%xmm10,%xmm10
2730 vaesenc %xmm4,%xmm11,%xmm11
2731 vaesenc %xmm4,%xmm12,%xmm12
2732
2733 vmovdqu 176(%r8),%xmm4
2734 vaesenc %xmm4,%xmm7,%xmm7
2735 vaesenc %xmm4,%xmm8,%xmm8
2736 vaesenc %xmm4,%xmm9,%xmm9
2737 vaesenc %xmm4,%xmm10,%xmm10
2738 vaesenc %xmm4,%xmm11,%xmm11
2739 vaesenc %xmm4,%xmm12,%xmm12
2740
2741 vmovdqu 192(%r8),%xmm4
2742 vaesenc %xmm4,%xmm7,%xmm7
2743 vaesenc %xmm4,%xmm8,%xmm8
2744 vaesenc %xmm4,%xmm9,%xmm9
2745 vaesenc %xmm4,%xmm10,%xmm10
2746 vaesenc %xmm4,%xmm11,%xmm11
2747 vaesenc %xmm4,%xmm12,%xmm12
2748
2749 vmovdqu 208(%r8),%xmm4
2750 vaesenc %xmm4,%xmm7,%xmm7
2751 vaesenc %xmm4,%xmm8,%xmm8
2752 vaesenc %xmm4,%xmm9,%xmm9
2753 vaesenc %xmm4,%xmm10,%xmm10
2754 vaesenc %xmm4,%xmm11,%xmm11
2755 vaesenc %xmm4,%xmm12,%xmm12
2756
2757 vmovdqu 224(%r8),%xmm6
2758 vpalignr $8,%xmm0,%xmm0,%xmm2
2759 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
2760 vpxor %xmm0,%xmm2,%xmm0
2761
2762 vpxor 0(%rdi),%xmm6,%xmm4
2763 vaesenclast %xmm4,%xmm7,%xmm7
2764 vpxor 16(%rdi),%xmm6,%xmm4
2765 vaesenclast %xmm4,%xmm8,%xmm8
2766 vpxor 32(%rdi),%xmm6,%xmm4
2767 vaesenclast %xmm4,%xmm9,%xmm9
2768 vpxor 48(%rdi),%xmm6,%xmm4
2769 vaesenclast %xmm4,%xmm10,%xmm10
2770 vpxor 64(%rdi),%xmm6,%xmm4
2771 vaesenclast %xmm4,%xmm11,%xmm11
2772 vpxor 80(%rdi),%xmm6,%xmm4
2773 vaesenclast %xmm4,%xmm12,%xmm12
2774
2775 vpalignr $8,%xmm0,%xmm0,%xmm2
2776 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
2777 vpxor %xmm0,%xmm2,%xmm0
2778
2779 vmovdqu %xmm7,0(%rsi)
2780 vmovdqu %xmm8,16(%rsi)
2781 vmovdqu %xmm9,32(%rsi)
2782 vmovdqu %xmm10,48(%rsi)
2783 vmovdqu %xmm11,64(%rsi)
2784 vmovdqu %xmm12,80(%rsi)
2785
2786 vpxor %xmm5,%xmm0,%xmm0
2787
2788 leaq 96(%rdi),%rdi
2789 leaq 96(%rsi),%rsi
2790 jmp .L256_dec_loop1
2791
2792.L256_dec_finish_96:
2793 vmovdqa %xmm12,%xmm6
2794 vmovdqa %xmm11,16-32(%rax)
2795 vmovdqa %xmm10,32-32(%rax)
2796 vmovdqa %xmm9,48-32(%rax)
2797 vmovdqa %xmm8,64-32(%rax)
2798 vmovdqa %xmm7,80-32(%rax)
2799
2800 vmovdqu 0-32(%rcx),%xmm4
2801 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm1
2802 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2
2803 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3
2804 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm4
2805 vpxor %xmm4,%xmm1,%xmm1
2806
2807 vmovdqu -16(%rax),%xmm6
2808 vmovdqu -16(%rcx),%xmm13
2809
2810 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2811 vpxor %xmm4,%xmm1,%xmm1
2812 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2813 vpxor %xmm4,%xmm2,%xmm2
2814 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2815 vpxor %xmm4,%xmm3,%xmm3
2816 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2817 vpxor %xmm4,%xmm1,%xmm1
2818
2819 vmovdqu 0(%rax),%xmm6
2820 vmovdqu 0(%rcx),%xmm13
2821
2822 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2823 vpxor %xmm4,%xmm1,%xmm1
2824 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2825 vpxor %xmm4,%xmm2,%xmm2
2826 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2827 vpxor %xmm4,%xmm3,%xmm3
2828 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2829 vpxor %xmm4,%xmm1,%xmm1
2830
2831 vmovdqu 16(%rax),%xmm6
2832 vmovdqu 16(%rcx),%xmm13
2833
2834 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2835 vpxor %xmm4,%xmm1,%xmm1
2836 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2837 vpxor %xmm4,%xmm2,%xmm2
2838 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2839 vpxor %xmm4,%xmm3,%xmm3
2840 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2841 vpxor %xmm4,%xmm1,%xmm1
2842
2843 vmovdqu 32(%rax),%xmm6
2844 vmovdqu 32(%rcx),%xmm13
2845
2846 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4
2847 vpxor %xmm4,%xmm1,%xmm1
2848 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4
2849 vpxor %xmm4,%xmm2,%xmm2
2850 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4
2851 vpxor %xmm4,%xmm3,%xmm3
2852 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4
2853 vpxor %xmm4,%xmm1,%xmm1
2854
2855
2856 vmovdqu 80-32(%rax),%xmm6
2857 vpxor %xmm0,%xmm6,%xmm6
2858 vmovdqu 80-32(%rcx),%xmm5
2859 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4
2860 vpxor %xmm4,%xmm2,%xmm2
2861 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4
2862 vpxor %xmm4,%xmm3,%xmm3
2863 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4
2864 vpxor %xmm4,%xmm1,%xmm1
2865 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4
2866 vpxor %xmm4,%xmm1,%xmm1
2867
2868 vpsrldq $8,%xmm1,%xmm4
2869 vpxor %xmm4,%xmm2,%xmm5
2870 vpslldq $8,%xmm1,%xmm4
2871 vpxor %xmm4,%xmm3,%xmm0
2872
2873 vmovdqa poly(%rip),%xmm3
2874
2875 vpalignr $8,%xmm0,%xmm0,%xmm2
2876 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
2877 vpxor %xmm0,%xmm2,%xmm0
2878
2879 vpalignr $8,%xmm0,%xmm0,%xmm2
2880 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0
2881 vpxor %xmm0,%xmm2,%xmm0
2882
2883 vpxor %xmm5,%xmm0,%xmm0
2884
2885.L256_dec_loop2:
2886
2887
2888
2889 cmpq $16,%r9
2890 jb .L256_dec_out
2891 subq $16,%r9
2892
2893 vmovdqa %xmm15,%xmm2
2894 vpaddd one(%rip),%xmm15,%xmm15
2895
2896 vpxor 0(%r8),%xmm2,%xmm2
2897 vaesenc 16(%r8),%xmm2,%xmm2
2898 vaesenc 32(%r8),%xmm2,%xmm2
2899 vaesenc 48(%r8),%xmm2,%xmm2
2900 vaesenc 64(%r8),%xmm2,%xmm2
2901 vaesenc 80(%r8),%xmm2,%xmm2
2902 vaesenc 96(%r8),%xmm2,%xmm2
2903 vaesenc 112(%r8),%xmm2,%xmm2
2904 vaesenc 128(%r8),%xmm2,%xmm2
2905 vaesenc 144(%r8),%xmm2,%xmm2
2906 vaesenc 160(%r8),%xmm2,%xmm2
2907 vaesenc 176(%r8),%xmm2,%xmm2
2908 vaesenc 192(%r8),%xmm2,%xmm2
2909 vaesenc 208(%r8),%xmm2,%xmm2
2910 vaesenclast 224(%r8),%xmm2,%xmm2
2911 vpxor (%rdi),%xmm2,%xmm2
2912 vmovdqu %xmm2,(%rsi)
2913 addq $16,%rdi
2914 addq $16,%rsi
2915
2916 vpxor %xmm2,%xmm0,%xmm0
2917 vmovdqa -32(%rcx),%xmm1
2918 call GFMUL
2919
2920 jmp .L256_dec_loop2
2921
2922.L256_dec_out:
2923 vmovdqu %xmm0,(%rdx)
2924 .byte 0xf3,0xc3
2925.cfi_endproc
2926.size aes256gcmsiv_dec, .-aes256gcmsiv_dec
2927.globl aes256gcmsiv_kdf
2928.hidden aes256gcmsiv_kdf
2929.type aes256gcmsiv_kdf,@function
2930.align 16
2931aes256gcmsiv_kdf:
2932.cfi_startproc
2933
2934
2935
2936
2937 vmovdqa (%rdx),%xmm1
2938 vmovdqa 0(%rdi),%xmm4
2939 vmovdqa and_mask(%rip),%xmm11
2940 vmovdqa one(%rip),%xmm8
2941 vpshufd $0x90,%xmm4,%xmm4
2942 vpand %xmm11,%xmm4,%xmm4
2943 vpaddd %xmm8,%xmm4,%xmm6
2944 vpaddd %xmm8,%xmm6,%xmm7
2945 vpaddd %xmm8,%xmm7,%xmm11
2946 vpaddd %xmm8,%xmm11,%xmm12
2947 vpaddd %xmm8,%xmm12,%xmm13
2948
2949 vpxor %xmm1,%xmm4,%xmm4
2950 vpxor %xmm1,%xmm6,%xmm6
2951 vpxor %xmm1,%xmm7,%xmm7
2952 vpxor %xmm1,%xmm11,%xmm11
2953 vpxor %xmm1,%xmm12,%xmm12
2954 vpxor %xmm1,%xmm13,%xmm13
2955
2956 vmovdqa 16(%rdx),%xmm1
2957 vaesenc %xmm1,%xmm4,%xmm4
2958 vaesenc %xmm1,%xmm6,%xmm6
2959 vaesenc %xmm1,%xmm7,%xmm7
2960 vaesenc %xmm1,%xmm11,%xmm11
2961 vaesenc %xmm1,%xmm12,%xmm12
2962 vaesenc %xmm1,%xmm13,%xmm13
2963
2964 vmovdqa 32(%rdx),%xmm2
2965 vaesenc %xmm2,%xmm4,%xmm4
2966 vaesenc %xmm2,%xmm6,%xmm6
2967 vaesenc %xmm2,%xmm7,%xmm7
2968 vaesenc %xmm2,%xmm11,%xmm11
2969 vaesenc %xmm2,%xmm12,%xmm12
2970 vaesenc %xmm2,%xmm13,%xmm13
2971
2972 vmovdqa 48(%rdx),%xmm1
2973 vaesenc %xmm1,%xmm4,%xmm4
2974 vaesenc %xmm1,%xmm6,%xmm6
2975 vaesenc %xmm1,%xmm7,%xmm7
2976 vaesenc %xmm1,%xmm11,%xmm11
2977 vaesenc %xmm1,%xmm12,%xmm12
2978 vaesenc %xmm1,%xmm13,%xmm13
2979
2980 vmovdqa 64(%rdx),%xmm2
2981 vaesenc %xmm2,%xmm4,%xmm4
2982 vaesenc %xmm2,%xmm6,%xmm6
2983 vaesenc %xmm2,%xmm7,%xmm7
2984 vaesenc %xmm2,%xmm11,%xmm11
2985 vaesenc %xmm2,%xmm12,%xmm12
2986 vaesenc %xmm2,%xmm13,%xmm13
2987
2988 vmovdqa 80(%rdx),%xmm1
2989 vaesenc %xmm1,%xmm4,%xmm4
2990 vaesenc %xmm1,%xmm6,%xmm6
2991 vaesenc %xmm1,%xmm7,%xmm7
2992 vaesenc %xmm1,%xmm11,%xmm11
2993 vaesenc %xmm1,%xmm12,%xmm12
2994 vaesenc %xmm1,%xmm13,%xmm13
2995
2996 vmovdqa 96(%rdx),%xmm2
2997 vaesenc %xmm2,%xmm4,%xmm4
2998 vaesenc %xmm2,%xmm6,%xmm6
2999 vaesenc %xmm2,%xmm7,%xmm7
3000 vaesenc %xmm2,%xmm11,%xmm11
3001 vaesenc %xmm2,%xmm12,%xmm12
3002 vaesenc %xmm2,%xmm13,%xmm13
3003
3004 vmovdqa 112(%rdx),%xmm1
3005 vaesenc %xmm1,%xmm4,%xmm4
3006 vaesenc %xmm1,%xmm6,%xmm6
3007 vaesenc %xmm1,%xmm7,%xmm7
3008 vaesenc %xmm1,%xmm11,%xmm11
3009 vaesenc %xmm1,%xmm12,%xmm12
3010 vaesenc %xmm1,%xmm13,%xmm13
3011
3012 vmovdqa 128(%rdx),%xmm2
3013 vaesenc %xmm2,%xmm4,%xmm4
3014 vaesenc %xmm2,%xmm6,%xmm6
3015 vaesenc %xmm2,%xmm7,%xmm7
3016 vaesenc %xmm2,%xmm11,%xmm11
3017 vaesenc %xmm2,%xmm12,%xmm12
3018 vaesenc %xmm2,%xmm13,%xmm13
3019
3020 vmovdqa 144(%rdx),%xmm1
3021 vaesenc %xmm1,%xmm4,%xmm4
3022 vaesenc %xmm1,%xmm6,%xmm6
3023 vaesenc %xmm1,%xmm7,%xmm7
3024 vaesenc %xmm1,%xmm11,%xmm11
3025 vaesenc %xmm1,%xmm12,%xmm12
3026 vaesenc %xmm1,%xmm13,%xmm13
3027
3028 vmovdqa 160(%rdx),%xmm2
3029 vaesenc %xmm2,%xmm4,%xmm4
3030 vaesenc %xmm2,%xmm6,%xmm6
3031 vaesenc %xmm2,%xmm7,%xmm7
3032 vaesenc %xmm2,%xmm11,%xmm11
3033 vaesenc %xmm2,%xmm12,%xmm12
3034 vaesenc %xmm2,%xmm13,%xmm13
3035
3036 vmovdqa 176(%rdx),%xmm1
3037 vaesenc %xmm1,%xmm4,%xmm4
3038 vaesenc %xmm1,%xmm6,%xmm6
3039 vaesenc %xmm1,%xmm7,%xmm7
3040 vaesenc %xmm1,%xmm11,%xmm11
3041 vaesenc %xmm1,%xmm12,%xmm12
3042 vaesenc %xmm1,%xmm13,%xmm13
3043
3044 vmovdqa 192(%rdx),%xmm2
3045 vaesenc %xmm2,%xmm4,%xmm4
3046 vaesenc %xmm2,%xmm6,%xmm6
3047 vaesenc %xmm2,%xmm7,%xmm7
3048 vaesenc %xmm2,%xmm11,%xmm11
3049 vaesenc %xmm2,%xmm12,%xmm12
3050 vaesenc %xmm2,%xmm13,%xmm13
3051
3052 vmovdqa 208(%rdx),%xmm1
3053 vaesenc %xmm1,%xmm4,%xmm4
3054 vaesenc %xmm1,%xmm6,%xmm6
3055 vaesenc %xmm1,%xmm7,%xmm7
3056 vaesenc %xmm1,%xmm11,%xmm11
3057 vaesenc %xmm1,%xmm12,%xmm12
3058 vaesenc %xmm1,%xmm13,%xmm13
3059
3060 vmovdqa 224(%rdx),%xmm2
3061 vaesenclast %xmm2,%xmm4,%xmm4
3062 vaesenclast %xmm2,%xmm6,%xmm6
3063 vaesenclast %xmm2,%xmm7,%xmm7
3064 vaesenclast %xmm2,%xmm11,%xmm11
3065 vaesenclast %xmm2,%xmm12,%xmm12
3066 vaesenclast %xmm2,%xmm13,%xmm13
3067
3068
3069 vmovdqa %xmm4,0(%rsi)
3070 vmovdqa %xmm6,16(%rsi)
3071 vmovdqa %xmm7,32(%rsi)
3072 vmovdqa %xmm11,48(%rsi)
3073 vmovdqa %xmm12,64(%rsi)
3074 vmovdqa %xmm13,80(%rsi)
3075 .byte 0xf3,0xc3
3076.cfi_endproc
3077.size aes256gcmsiv_kdf, .-aes256gcmsiv_kdf
3078#endif
3079