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 17.p2align 5 18_aesni_ctr32_ghash_6x: 19 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 L$oop6x 32 33.p2align 5 34L$oop6x: 35 addl $100663296,%ebx 36 jc L$handle_ctr32 37 vmovdqu 0-32(%r9),%xmm3 38 vpaddb %xmm2,%xmm14,%xmm1 39 vpxor %xmm15,%xmm10,%xmm10 40 vpxor %xmm15,%xmm11,%xmm11 41 42L$resume_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 L$enc_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 L$enc_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 L$enc_tail 260 261.p2align 5 262L$handle_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 L$resume_ctr32 282 283.p2align 5 284L$enc_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 L$6x_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 L$oop6x 338 339L$6x_done: 340 vpxor 16+8(%rsp),%xmm8,%xmm8 341 vpxor %xmm4,%xmm8,%xmm8 342 343 .byte 0xf3,0xc3 344 345 346.globl _aesni_gcm_decrypt 347.private_extern _aesni_gcm_decrypt 348 349.p2align 5 350_aesni_gcm_decrypt: 351 352 xorq %r10,%r10 353 354 355 356 cmpq $0x60,%rdx 357 jb L$gcm_dec_abort 358 359 leaq (%rsp),%rax 360 361 pushq %rbx 362 363 pushq %rbp 364 365 pushq %r12 366 367 pushq %r13 368 369 pushq %r14 370 371 pushq %r15 372 373 vzeroupper 374 375 vmovdqu (%r8),%xmm1 376 addq $-128,%rsp 377 movl 12(%r8),%ebx 378 leaq L$bswap_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 L$dec_no_key_aliasing 393 cmpq $768,%r15 394 jnc L$dec_no_key_aliasing 395 subq %r15,%rsp 396L$dec_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 443 movq -40(%rax),%r14 444 445 movq -32(%rax),%r13 446 447 movq -24(%rax),%r12 448 449 movq -16(%rax),%rbp 450 451 movq -8(%rax),%rbx 452 453 leaq (%rax),%rsp 454 455L$gcm_dec_abort: 456 movq %r10,%rax 457 .byte 0xf3,0xc3 458 459 460 461.p2align 5 462_aesni_ctr32_6x: 463 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 L$handle_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 L$oop_ctr32 484 485.p2align 4 486L$oop_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 L$oop_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.p2align 5 529L$handle_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 L$oop_ctr32 550 551 552 553.globl _aesni_gcm_encrypt 554.private_extern _aesni_gcm_encrypt 555 556.p2align 5 557_aesni_gcm_encrypt: 558 559#ifdef BORINGSSL_DISPATCH_TEST 560 561 movb $1,_BORINGSSL_function_hit+2(%rip) 562#endif 563 xorq %r10,%r10 564 565 566 567 568 cmpq $288,%rdx 569 jb L$gcm_enc_abort 570 571 leaq (%rsp),%rax 572 573 pushq %rbx 574 575 pushq %rbp 576 577 pushq %r12 578 579 pushq %r13 580 581 pushq %r14 582 583 pushq %r15 584 585 vzeroupper 586 587 vmovdqu (%r8),%xmm1 588 addq $-128,%rsp 589 movl 12(%r8),%ebx 590 leaq L$bswap_mask(%rip),%r11 591 leaq -128(%rcx),%r14 592 movq $0xf80,%r15 593 leaq 128(%rcx),%rcx 594 vmovdqu (%r11),%xmm0 595 andq $-128,%rsp 596 movl 240-128(%rcx),%ebp 597 598 andq %r15,%r14 599 andq %rsp,%r15 600 subq %r14,%r15 601 jc L$enc_no_key_aliasing 602 cmpq $768,%r15 603 jnc L$enc_no_key_aliasing 604 subq %r15,%rsp 605L$enc_no_key_aliasing: 606 607 leaq (%rsi),%r14 608 609 610 611 612 613 614 615 616 leaq -192(%rsi,%rdx,1),%r15 617 618 shrq $4,%rdx 619 620 call _aesni_ctr32_6x 621 vpshufb %xmm0,%xmm9,%xmm8 622 vpshufb %xmm0,%xmm10,%xmm2 623 vmovdqu %xmm8,112(%rsp) 624 vpshufb %xmm0,%xmm11,%xmm4 625 vmovdqu %xmm2,96(%rsp) 626 vpshufb %xmm0,%xmm12,%xmm5 627 vmovdqu %xmm4,80(%rsp) 628 vpshufb %xmm0,%xmm13,%xmm6 629 vmovdqu %xmm5,64(%rsp) 630 vpshufb %xmm0,%xmm14,%xmm7 631 vmovdqu %xmm6,48(%rsp) 632 633 call _aesni_ctr32_6x 634 635 vmovdqu (%r9),%xmm8 636 leaq 32+32(%r9),%r9 637 subq $12,%rdx 638 movq $192,%r10 639 vpshufb %xmm0,%xmm8,%xmm8 640 641 call _aesni_ctr32_ghash_6x 642 vmovdqu 32(%rsp),%xmm7 643 vmovdqu (%r11),%xmm0 644 vmovdqu 0-32(%r9),%xmm3 645 vpunpckhqdq %xmm7,%xmm7,%xmm1 646 vmovdqu 32-32(%r9),%xmm15 647 vmovups %xmm9,-96(%rsi) 648 vpshufb %xmm0,%xmm9,%xmm9 649 vpxor %xmm7,%xmm1,%xmm1 650 vmovups %xmm10,-80(%rsi) 651 vpshufb %xmm0,%xmm10,%xmm10 652 vmovups %xmm11,-64(%rsi) 653 vpshufb %xmm0,%xmm11,%xmm11 654 vmovups %xmm12,-48(%rsi) 655 vpshufb %xmm0,%xmm12,%xmm12 656 vmovups %xmm13,-32(%rsi) 657 vpshufb %xmm0,%xmm13,%xmm13 658 vmovups %xmm14,-16(%rsi) 659 vpshufb %xmm0,%xmm14,%xmm14 660 vmovdqu %xmm9,16(%rsp) 661 vmovdqu 48(%rsp),%xmm6 662 vmovdqu 16-32(%r9),%xmm0 663 vpunpckhqdq %xmm6,%xmm6,%xmm2 664 vpclmulqdq $0x00,%xmm3,%xmm7,%xmm5 665 vpxor %xmm6,%xmm2,%xmm2 666 vpclmulqdq $0x11,%xmm3,%xmm7,%xmm7 667 vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1 668 669 vmovdqu 64(%rsp),%xmm9 670 vpclmulqdq $0x00,%xmm0,%xmm6,%xmm4 671 vmovdqu 48-32(%r9),%xmm3 672 vpxor %xmm5,%xmm4,%xmm4 673 vpunpckhqdq %xmm9,%xmm9,%xmm5 674 vpclmulqdq $0x11,%xmm0,%xmm6,%xmm6 675 vpxor %xmm9,%xmm5,%xmm5 676 vpxor %xmm7,%xmm6,%xmm6 677 vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2 678 vmovdqu 80-32(%r9),%xmm15 679 vpxor %xmm1,%xmm2,%xmm2 680 681 vmovdqu 80(%rsp),%xmm1 682 vpclmulqdq $0x00,%xmm3,%xmm9,%xmm7 683 vmovdqu 64-32(%r9),%xmm0 684 vpxor %xmm4,%xmm7,%xmm7 685 vpunpckhqdq %xmm1,%xmm1,%xmm4 686 vpclmulqdq $0x11,%xmm3,%xmm9,%xmm9 687 vpxor %xmm1,%xmm4,%xmm4 688 vpxor %xmm6,%xmm9,%xmm9 689 vpclmulqdq $0x00,%xmm15,%xmm5,%xmm5 690 vpxor %xmm2,%xmm5,%xmm5 691 692 vmovdqu 96(%rsp),%xmm2 693 vpclmulqdq $0x00,%xmm0,%xmm1,%xmm6 694 vmovdqu 96-32(%r9),%xmm3 695 vpxor %xmm7,%xmm6,%xmm6 696 vpunpckhqdq %xmm2,%xmm2,%xmm7 697 vpclmulqdq $0x11,%xmm0,%xmm1,%xmm1 698 vpxor %xmm2,%xmm7,%xmm7 699 vpxor %xmm9,%xmm1,%xmm1 700 vpclmulqdq $0x10,%xmm15,%xmm4,%xmm4 701 vmovdqu 128-32(%r9),%xmm15 702 vpxor %xmm5,%xmm4,%xmm4 703 704 vpxor 112(%rsp),%xmm8,%xmm8 705 vpclmulqdq $0x00,%xmm3,%xmm2,%xmm5 706 vmovdqu 112-32(%r9),%xmm0 707 vpunpckhqdq %xmm8,%xmm8,%xmm9 708 vpxor %xmm6,%xmm5,%xmm5 709 vpclmulqdq $0x11,%xmm3,%xmm2,%xmm2 710 vpxor %xmm8,%xmm9,%xmm9 711 vpxor %xmm1,%xmm2,%xmm2 712 vpclmulqdq $0x00,%xmm15,%xmm7,%xmm7 713 vpxor %xmm4,%xmm7,%xmm4 714 715 vpclmulqdq $0x00,%xmm0,%xmm8,%xmm6 716 vmovdqu 0-32(%r9),%xmm3 717 vpunpckhqdq %xmm14,%xmm14,%xmm1 718 vpclmulqdq $0x11,%xmm0,%xmm8,%xmm8 719 vpxor %xmm14,%xmm1,%xmm1 720 vpxor %xmm5,%xmm6,%xmm5 721 vpclmulqdq $0x10,%xmm15,%xmm9,%xmm9 722 vmovdqu 32-32(%r9),%xmm15 723 vpxor %xmm2,%xmm8,%xmm7 724 vpxor %xmm4,%xmm9,%xmm6 725 726 vmovdqu 16-32(%r9),%xmm0 727 vpxor %xmm5,%xmm7,%xmm9 728 vpclmulqdq $0x00,%xmm3,%xmm14,%xmm4 729 vpxor %xmm9,%xmm6,%xmm6 730 vpunpckhqdq %xmm13,%xmm13,%xmm2 731 vpclmulqdq $0x11,%xmm3,%xmm14,%xmm14 732 vpxor %xmm13,%xmm2,%xmm2 733 vpslldq $8,%xmm6,%xmm9 734 vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1 735 vpxor %xmm9,%xmm5,%xmm8 736 vpsrldq $8,%xmm6,%xmm6 737 vpxor %xmm6,%xmm7,%xmm7 738 739 vpclmulqdq $0x00,%xmm0,%xmm13,%xmm5 740 vmovdqu 48-32(%r9),%xmm3 741 vpxor %xmm4,%xmm5,%xmm5 742 vpunpckhqdq %xmm12,%xmm12,%xmm9 743 vpclmulqdq $0x11,%xmm0,%xmm13,%xmm13 744 vpxor %xmm12,%xmm9,%xmm9 745 vpxor %xmm14,%xmm13,%xmm13 746 vpalignr $8,%xmm8,%xmm8,%xmm14 747 vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2 748 vmovdqu 80-32(%r9),%xmm15 749 vpxor %xmm1,%xmm2,%xmm2 750 751 vpclmulqdq $0x00,%xmm3,%xmm12,%xmm4 752 vmovdqu 64-32(%r9),%xmm0 753 vpxor %xmm5,%xmm4,%xmm4 754 vpunpckhqdq %xmm11,%xmm11,%xmm1 755 vpclmulqdq $0x11,%xmm3,%xmm12,%xmm12 756 vpxor %xmm11,%xmm1,%xmm1 757 vpxor %xmm13,%xmm12,%xmm12 758 vxorps 16(%rsp),%xmm7,%xmm7 759 vpclmulqdq $0x00,%xmm15,%xmm9,%xmm9 760 vpxor %xmm2,%xmm9,%xmm9 761 762 vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8 763 vxorps %xmm14,%xmm8,%xmm8 764 765 vpclmulqdq $0x00,%xmm0,%xmm11,%xmm5 766 vmovdqu 96-32(%r9),%xmm3 767 vpxor %xmm4,%xmm5,%xmm5 768 vpunpckhqdq %xmm10,%xmm10,%xmm2 769 vpclmulqdq $0x11,%xmm0,%xmm11,%xmm11 770 vpxor %xmm10,%xmm2,%xmm2 771 vpalignr $8,%xmm8,%xmm8,%xmm14 772 vpxor %xmm12,%xmm11,%xmm11 773 vpclmulqdq $0x10,%xmm15,%xmm1,%xmm1 774 vmovdqu 128-32(%r9),%xmm15 775 vpxor %xmm9,%xmm1,%xmm1 776 777 vxorps %xmm7,%xmm14,%xmm14 778 vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8 779 vxorps %xmm14,%xmm8,%xmm8 780 781 vpclmulqdq $0x00,%xmm3,%xmm10,%xmm4 782 vmovdqu 112-32(%r9),%xmm0 783 vpxor %xmm5,%xmm4,%xmm4 784 vpunpckhqdq %xmm8,%xmm8,%xmm9 785 vpclmulqdq $0x11,%xmm3,%xmm10,%xmm10 786 vpxor %xmm8,%xmm9,%xmm9 787 vpxor %xmm11,%xmm10,%xmm10 788 vpclmulqdq $0x00,%xmm15,%xmm2,%xmm2 789 vpxor %xmm1,%xmm2,%xmm2 790 791 vpclmulqdq $0x00,%xmm0,%xmm8,%xmm5 792 vpclmulqdq $0x11,%xmm0,%xmm8,%xmm7 793 vpxor %xmm4,%xmm5,%xmm5 794 vpclmulqdq $0x10,%xmm15,%xmm9,%xmm6 795 vpxor %xmm10,%xmm7,%xmm7 796 vpxor %xmm2,%xmm6,%xmm6 797 798 vpxor %xmm5,%xmm7,%xmm4 799 vpxor %xmm4,%xmm6,%xmm6 800 vpslldq $8,%xmm6,%xmm1 801 vmovdqu 16(%r11),%xmm3 802 vpsrldq $8,%xmm6,%xmm6 803 vpxor %xmm1,%xmm5,%xmm8 804 vpxor %xmm6,%xmm7,%xmm7 805 806 vpalignr $8,%xmm8,%xmm8,%xmm2 807 vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8 808 vpxor %xmm2,%xmm8,%xmm8 809 810 vpalignr $8,%xmm8,%xmm8,%xmm2 811 vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8 812 vpxor %xmm7,%xmm2,%xmm2 813 vpxor %xmm2,%xmm8,%xmm8 814 vpshufb (%r11),%xmm8,%xmm8 815 vmovdqu %xmm8,-64(%r9) 816 817 vzeroupper 818 movq -48(%rax),%r15 819 820 movq -40(%rax),%r14 821 822 movq -32(%rax),%r13 823 824 movq -24(%rax),%r12 825 826 movq -16(%rax),%rbp 827 828 movq -8(%rax),%rbx 829 830 leaq (%rax),%rsp 831 832L$gcm_enc_abort: 833 movq %r10,%rax 834 .byte 0xf3,0xc3 835 836 837.p2align 6 838L$bswap_mask: 839.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 840L$poly: 841.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2 842L$one_msb: 843.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 844L$two_lsb: 845.byte 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 846L$one_lsb: 847.byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 848.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 849.p2align 6 850#endif 851