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 350 aesni_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 557 aesni_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