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