1// This file is generated from a similarly-named Perl script in the BoringSSL 2// source tree. Do not edit by hand. 3 4#include <openssl/asm_base.h> 5 6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && defined(__APPLE__) 7.section __DATA,__const 8.p2align 4 9 10 11L$bswap_mask: 12.quad 0x08090a0b0c0d0e0f, 0x0001020304050607 13 14 15 16 17 18 19 20 21L$gfpoly: 22.quad 1, 0xc200000000000000 23 24 25L$gfpoly_and_internal_carrybit: 26.quad 1, 0xc200000000000001 27 28.p2align 5 29 30L$ctr_pattern: 31.quad 0, 0 32.quad 1, 0 33L$inc_2blocks: 34.quad 2, 0 35.quad 2, 0 36 37.text 38.globl _gcm_init_vpclmulqdq_avx2 39.private_extern _gcm_init_vpclmulqdq_avx2 40 41.p2align 5 42_gcm_init_vpclmulqdq_avx2: 43 44 45_CET_ENDBR 46 47 48 49 50 51 vpshufd $0x4e,(%rsi),%xmm3 52 53 54 55 56 57 vpshufd $0xd3,%xmm3,%xmm0 58 vpsrad $31,%xmm0,%xmm0 59 vpaddq %xmm3,%xmm3,%xmm3 60 vpand L$gfpoly_and_internal_carrybit(%rip),%xmm0,%xmm0 61 vpxor %xmm0,%xmm3,%xmm3 62 63 vbroadcasti128 L$gfpoly(%rip),%ymm6 64 65 66 vpclmulqdq $0x00,%xmm3,%xmm3,%xmm0 67 vpclmulqdq $0x01,%xmm3,%xmm3,%xmm1 68 vpclmulqdq $0x10,%xmm3,%xmm3,%xmm2 69 vpxor %xmm2,%xmm1,%xmm1 70 vpclmulqdq $0x01,%xmm0,%xmm6,%xmm2 71 vpshufd $0x4e,%xmm0,%xmm0 72 vpxor %xmm0,%xmm1,%xmm1 73 vpxor %xmm2,%xmm1,%xmm1 74 vpclmulqdq $0x11,%xmm3,%xmm3,%xmm5 75 vpclmulqdq $0x01,%xmm1,%xmm6,%xmm0 76 vpshufd $0x4e,%xmm1,%xmm1 77 vpxor %xmm1,%xmm5,%xmm5 78 vpxor %xmm0,%xmm5,%xmm5 79 80 81 82 vinserti128 $1,%xmm3,%ymm5,%ymm3 83 vinserti128 $1,%xmm5,%ymm5,%ymm5 84 85 86 vpclmulqdq $0x00,%ymm5,%ymm3,%ymm0 87 vpclmulqdq $0x01,%ymm5,%ymm3,%ymm1 88 vpclmulqdq $0x10,%ymm5,%ymm3,%ymm2 89 vpxor %ymm2,%ymm1,%ymm1 90 vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2 91 vpshufd $0x4e,%ymm0,%ymm0 92 vpxor %ymm0,%ymm1,%ymm1 93 vpxor %ymm2,%ymm1,%ymm1 94 vpclmulqdq $0x11,%ymm5,%ymm3,%ymm4 95 vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0 96 vpshufd $0x4e,%ymm1,%ymm1 97 vpxor %ymm1,%ymm4,%ymm4 98 vpxor %ymm0,%ymm4,%ymm4 99 100 101 102 vmovdqu %ymm3,96(%rdi) 103 vmovdqu %ymm4,64(%rdi) 104 105 106 107 vpunpcklqdq %ymm3,%ymm4,%ymm0 108 vpunpckhqdq %ymm3,%ymm4,%ymm1 109 vpxor %ymm1,%ymm0,%ymm0 110 vmovdqu %ymm0,128+32(%rdi) 111 112 113 vpclmulqdq $0x00,%ymm5,%ymm4,%ymm0 114 vpclmulqdq $0x01,%ymm5,%ymm4,%ymm1 115 vpclmulqdq $0x10,%ymm5,%ymm4,%ymm2 116 vpxor %ymm2,%ymm1,%ymm1 117 vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2 118 vpshufd $0x4e,%ymm0,%ymm0 119 vpxor %ymm0,%ymm1,%ymm1 120 vpxor %ymm2,%ymm1,%ymm1 121 vpclmulqdq $0x11,%ymm5,%ymm4,%ymm3 122 vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0 123 vpshufd $0x4e,%ymm1,%ymm1 124 vpxor %ymm1,%ymm3,%ymm3 125 vpxor %ymm0,%ymm3,%ymm3 126 127 vpclmulqdq $0x00,%ymm5,%ymm3,%ymm0 128 vpclmulqdq $0x01,%ymm5,%ymm3,%ymm1 129 vpclmulqdq $0x10,%ymm5,%ymm3,%ymm2 130 vpxor %ymm2,%ymm1,%ymm1 131 vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2 132 vpshufd $0x4e,%ymm0,%ymm0 133 vpxor %ymm0,%ymm1,%ymm1 134 vpxor %ymm2,%ymm1,%ymm1 135 vpclmulqdq $0x11,%ymm5,%ymm3,%ymm4 136 vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0 137 vpshufd $0x4e,%ymm1,%ymm1 138 vpxor %ymm1,%ymm4,%ymm4 139 vpxor %ymm0,%ymm4,%ymm4 140 141 vmovdqu %ymm3,32(%rdi) 142 vmovdqu %ymm4,0(%rdi) 143 144 145 146 vpunpcklqdq %ymm3,%ymm4,%ymm0 147 vpunpckhqdq %ymm3,%ymm4,%ymm1 148 vpxor %ymm1,%ymm0,%ymm0 149 vmovdqu %ymm0,128(%rdi) 150 151 vzeroupper 152 ret 153 154 155 156.globl _gcm_gmult_vpclmulqdq_avx2 157.private_extern _gcm_gmult_vpclmulqdq_avx2 158 159.p2align 5 160_gcm_gmult_vpclmulqdq_avx2: 161 162 163_CET_ENDBR 164 165 166 167 vmovdqu (%rdi),%xmm0 168 vmovdqu L$bswap_mask(%rip),%xmm1 169 vmovdqu 128-16(%rsi),%xmm2 170 vmovdqu L$gfpoly(%rip),%xmm3 171 vpshufb %xmm1,%xmm0,%xmm0 172 173 vpclmulqdq $0x00,%xmm2,%xmm0,%xmm4 174 vpclmulqdq $0x01,%xmm2,%xmm0,%xmm5 175 vpclmulqdq $0x10,%xmm2,%xmm0,%xmm6 176 vpxor %xmm6,%xmm5,%xmm5 177 vpclmulqdq $0x01,%xmm4,%xmm3,%xmm6 178 vpshufd $0x4e,%xmm4,%xmm4 179 vpxor %xmm4,%xmm5,%xmm5 180 vpxor %xmm6,%xmm5,%xmm5 181 vpclmulqdq $0x11,%xmm2,%xmm0,%xmm0 182 vpclmulqdq $0x01,%xmm5,%xmm3,%xmm4 183 vpshufd $0x4e,%xmm5,%xmm5 184 vpxor %xmm5,%xmm0,%xmm0 185 vpxor %xmm4,%xmm0,%xmm0 186 187 188 vpshufb %xmm1,%xmm0,%xmm0 189 vmovdqu %xmm0,(%rdi) 190 ret 191 192 193 194.globl _gcm_ghash_vpclmulqdq_avx2 195.private_extern _gcm_ghash_vpclmulqdq_avx2 196 197.p2align 5 198_gcm_ghash_vpclmulqdq_avx2: 199 200 201_CET_ENDBR 202 203 204 205 vbroadcasti128 L$bswap_mask(%rip),%ymm6 206 vmovdqu (%rdi),%xmm5 207 vpshufb %xmm6,%xmm5,%xmm5 208 vbroadcasti128 L$gfpoly(%rip),%ymm7 209 210 211 cmpq $32,%rcx 212 jb L$ghash_lastblock 213 214 cmpq $127,%rcx 215 jbe L$ghash_loop_1x 216 217 218 vmovdqu 128(%rsi),%ymm8 219 vmovdqu 128+32(%rsi),%ymm9 220L$ghash_loop_4x: 221 222 vmovdqu 0(%rdx),%ymm1 223 vpshufb %ymm6,%ymm1,%ymm1 224 vmovdqu 0(%rsi),%ymm2 225 vpxor %ymm5,%ymm1,%ymm1 226 vpclmulqdq $0x00,%ymm2,%ymm1,%ymm3 227 vpclmulqdq $0x11,%ymm2,%ymm1,%ymm5 228 vpunpckhqdq %ymm1,%ymm1,%ymm0 229 vpxor %ymm1,%ymm0,%ymm0 230 vpclmulqdq $0x00,%ymm8,%ymm0,%ymm4 231 232 vmovdqu 32(%rdx),%ymm1 233 vpshufb %ymm6,%ymm1,%ymm1 234 vmovdqu 32(%rsi),%ymm2 235 vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0 236 vpxor %ymm0,%ymm3,%ymm3 237 vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0 238 vpxor %ymm0,%ymm5,%ymm5 239 vpunpckhqdq %ymm1,%ymm1,%ymm0 240 vpxor %ymm1,%ymm0,%ymm0 241 vpclmulqdq $0x10,%ymm8,%ymm0,%ymm0 242 vpxor %ymm0,%ymm4,%ymm4 243 244 vmovdqu 64(%rdx),%ymm1 245 vpshufb %ymm6,%ymm1,%ymm1 246 vmovdqu 64(%rsi),%ymm2 247 vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0 248 vpxor %ymm0,%ymm3,%ymm3 249 vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0 250 vpxor %ymm0,%ymm5,%ymm5 251 vpunpckhqdq %ymm1,%ymm1,%ymm0 252 vpxor %ymm1,%ymm0,%ymm0 253 vpclmulqdq $0x00,%ymm9,%ymm0,%ymm0 254 vpxor %ymm0,%ymm4,%ymm4 255 256 257 vmovdqu 96(%rdx),%ymm1 258 vpshufb %ymm6,%ymm1,%ymm1 259 vmovdqu 96(%rsi),%ymm2 260 vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0 261 vpxor %ymm0,%ymm3,%ymm3 262 vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0 263 vpxor %ymm0,%ymm5,%ymm5 264 vpunpckhqdq %ymm1,%ymm1,%ymm0 265 vpxor %ymm1,%ymm0,%ymm0 266 vpclmulqdq $0x10,%ymm9,%ymm0,%ymm0 267 vpxor %ymm0,%ymm4,%ymm4 268 269 vpxor %ymm3,%ymm4,%ymm4 270 vpxor %ymm5,%ymm4,%ymm4 271 272 273 vbroadcasti128 L$gfpoly(%rip),%ymm2 274 vpclmulqdq $0x01,%ymm3,%ymm2,%ymm0 275 vpshufd $0x4e,%ymm3,%ymm3 276 vpxor %ymm3,%ymm4,%ymm4 277 vpxor %ymm0,%ymm4,%ymm4 278 279 vpclmulqdq $0x01,%ymm4,%ymm2,%ymm0 280 vpshufd $0x4e,%ymm4,%ymm4 281 vpxor %ymm4,%ymm5,%ymm5 282 vpxor %ymm0,%ymm5,%ymm5 283 vextracti128 $1,%ymm5,%xmm0 284 vpxor %xmm0,%xmm5,%xmm5 285 286 subq $-128,%rdx 287 addq $-128,%rcx 288 cmpq $127,%rcx 289 ja L$ghash_loop_4x 290 291 292 cmpq $32,%rcx 293 jb L$ghash_loop_1x_done 294L$ghash_loop_1x: 295 vmovdqu (%rdx),%ymm0 296 vpshufb %ymm6,%ymm0,%ymm0 297 vpxor %ymm0,%ymm5,%ymm5 298 vmovdqu 128-32(%rsi),%ymm0 299 vpclmulqdq $0x00,%ymm0,%ymm5,%ymm1 300 vpclmulqdq $0x01,%ymm0,%ymm5,%ymm2 301 vpclmulqdq $0x10,%ymm0,%ymm5,%ymm3 302 vpxor %ymm3,%ymm2,%ymm2 303 vpclmulqdq $0x01,%ymm1,%ymm7,%ymm3 304 vpshufd $0x4e,%ymm1,%ymm1 305 vpxor %ymm1,%ymm2,%ymm2 306 vpxor %ymm3,%ymm2,%ymm2 307 vpclmulqdq $0x11,%ymm0,%ymm5,%ymm5 308 vpclmulqdq $0x01,%ymm2,%ymm7,%ymm1 309 vpshufd $0x4e,%ymm2,%ymm2 310 vpxor %ymm2,%ymm5,%ymm5 311 vpxor %ymm1,%ymm5,%ymm5 312 313 vextracti128 $1,%ymm5,%xmm0 314 vpxor %xmm0,%xmm5,%xmm5 315 addq $32,%rdx 316 subq $32,%rcx 317 cmpq $32,%rcx 318 jae L$ghash_loop_1x 319L$ghash_loop_1x_done: 320 321 322 vzeroupper 323 324 325L$ghash_lastblock: 326 testq %rcx,%rcx 327 jz L$ghash_done 328 vmovdqu (%rdx),%xmm0 329 vpshufb %xmm6,%xmm0,%xmm0 330 vpxor %xmm0,%xmm5,%xmm5 331 vmovdqu 128-16(%rsi),%xmm0 332 vpclmulqdq $0x00,%xmm0,%xmm5,%xmm1 333 vpclmulqdq $0x01,%xmm0,%xmm5,%xmm2 334 vpclmulqdq $0x10,%xmm0,%xmm5,%xmm3 335 vpxor %xmm3,%xmm2,%xmm2 336 vpclmulqdq $0x01,%xmm1,%xmm7,%xmm3 337 vpshufd $0x4e,%xmm1,%xmm1 338 vpxor %xmm1,%xmm2,%xmm2 339 vpxor %xmm3,%xmm2,%xmm2 340 vpclmulqdq $0x11,%xmm0,%xmm5,%xmm5 341 vpclmulqdq $0x01,%xmm2,%xmm7,%xmm1 342 vpshufd $0x4e,%xmm2,%xmm2 343 vpxor %xmm2,%xmm5,%xmm5 344 vpxor %xmm1,%xmm5,%xmm5 345 346 347L$ghash_done: 348 349 vpshufb %xmm6,%xmm5,%xmm5 350 vmovdqu %xmm5,(%rdi) 351 ret 352 353 354 355.globl _aes_gcm_enc_update_vaes_avx2 356.private_extern _aes_gcm_enc_update_vaes_avx2 357 358.p2align 5 359_aes_gcm_enc_update_vaes_avx2: 360 361 362_CET_ENDBR 363 pushq %r12 364 365 366 movq 16(%rsp),%r12 367#ifdef BORINGSSL_DISPATCH_TEST 368 369 movb $1,_BORINGSSL_function_hit+8(%rip) 370#endif 371 vbroadcasti128 L$bswap_mask(%rip),%ymm0 372 373 374 375 vmovdqu (%r12),%xmm1 376 vpshufb %xmm0,%xmm1,%xmm1 377 vbroadcasti128 (%r8),%ymm11 378 vpshufb %ymm0,%ymm11,%ymm11 379 380 381 382 movl 240(%rcx),%r10d 383 leal -20(,%r10,4),%r10d 384 385 386 387 388 leaq 96(%rcx,%r10,4),%r11 389 vbroadcasti128 (%rcx),%ymm9 390 vbroadcasti128 (%r11),%ymm10 391 392 393 vpaddd L$ctr_pattern(%rip),%ymm11,%ymm11 394 395 396 397 cmpq $127,%rdx 398 jbe L$crypt_loop_4x_done__func1 399 400 vmovdqu 128(%r9),%ymm7 401 vmovdqu 128+32(%r9),%ymm8 402 403 404 405 vmovdqu L$inc_2blocks(%rip),%ymm2 406 vpshufb %ymm0,%ymm11,%ymm12 407 vpaddd %ymm2,%ymm11,%ymm11 408 vpshufb %ymm0,%ymm11,%ymm13 409 vpaddd %ymm2,%ymm11,%ymm11 410 vpshufb %ymm0,%ymm11,%ymm14 411 vpaddd %ymm2,%ymm11,%ymm11 412 vpshufb %ymm0,%ymm11,%ymm15 413 vpaddd %ymm2,%ymm11,%ymm11 414 415 416 vpxor %ymm9,%ymm12,%ymm12 417 vpxor %ymm9,%ymm13,%ymm13 418 vpxor %ymm9,%ymm14,%ymm14 419 vpxor %ymm9,%ymm15,%ymm15 420 421 leaq 16(%rcx),%rax 422L$vaesenc_loop_first_4_vecs__func1: 423 vbroadcasti128 (%rax),%ymm2 424 vaesenc %ymm2,%ymm12,%ymm12 425 vaesenc %ymm2,%ymm13,%ymm13 426 vaesenc %ymm2,%ymm14,%ymm14 427 vaesenc %ymm2,%ymm15,%ymm15 428 429 addq $16,%rax 430 cmpq %rax,%r11 431 jne L$vaesenc_loop_first_4_vecs__func1 432 vpxor 0(%rdi),%ymm10,%ymm2 433 vpxor 32(%rdi),%ymm10,%ymm3 434 vpxor 64(%rdi),%ymm10,%ymm5 435 vpxor 96(%rdi),%ymm10,%ymm6 436 vaesenclast %ymm2,%ymm12,%ymm12 437 vaesenclast %ymm3,%ymm13,%ymm13 438 vaesenclast %ymm5,%ymm14,%ymm14 439 vaesenclast %ymm6,%ymm15,%ymm15 440 vmovdqu %ymm12,0(%rsi) 441 vmovdqu %ymm13,32(%rsi) 442 vmovdqu %ymm14,64(%rsi) 443 vmovdqu %ymm15,96(%rsi) 444 445 subq $-128,%rdi 446 addq $-128,%rdx 447 cmpq $127,%rdx 448 jbe L$ghash_last_ciphertext_4x__func1 449.p2align 4 450L$crypt_loop_4x__func1: 451 452 453 454 455 vmovdqu L$inc_2blocks(%rip),%ymm2 456 vpshufb %ymm0,%ymm11,%ymm12 457 vpaddd %ymm2,%ymm11,%ymm11 458 vpshufb %ymm0,%ymm11,%ymm13 459 vpaddd %ymm2,%ymm11,%ymm11 460 vpshufb %ymm0,%ymm11,%ymm14 461 vpaddd %ymm2,%ymm11,%ymm11 462 vpshufb %ymm0,%ymm11,%ymm15 463 vpaddd %ymm2,%ymm11,%ymm11 464 465 466 vpxor %ymm9,%ymm12,%ymm12 467 vpxor %ymm9,%ymm13,%ymm13 468 vpxor %ymm9,%ymm14,%ymm14 469 vpxor %ymm9,%ymm15,%ymm15 470 471 cmpl $24,%r10d 472 jl L$aes128__func1 473 je L$aes192__func1 474 475 vbroadcasti128 -208(%r11),%ymm2 476 vaesenc %ymm2,%ymm12,%ymm12 477 vaesenc %ymm2,%ymm13,%ymm13 478 vaesenc %ymm2,%ymm14,%ymm14 479 vaesenc %ymm2,%ymm15,%ymm15 480 481 vbroadcasti128 -192(%r11),%ymm2 482 vaesenc %ymm2,%ymm12,%ymm12 483 vaesenc %ymm2,%ymm13,%ymm13 484 vaesenc %ymm2,%ymm14,%ymm14 485 vaesenc %ymm2,%ymm15,%ymm15 486 487L$aes192__func1: 488 vbroadcasti128 -176(%r11),%ymm2 489 vaesenc %ymm2,%ymm12,%ymm12 490 vaesenc %ymm2,%ymm13,%ymm13 491 vaesenc %ymm2,%ymm14,%ymm14 492 vaesenc %ymm2,%ymm15,%ymm15 493 494 vbroadcasti128 -160(%r11),%ymm2 495 vaesenc %ymm2,%ymm12,%ymm12 496 vaesenc %ymm2,%ymm13,%ymm13 497 vaesenc %ymm2,%ymm14,%ymm14 498 vaesenc %ymm2,%ymm15,%ymm15 499 500L$aes128__func1: 501 502 vmovdqu 0(%rsi),%ymm3 503 vpshufb %ymm0,%ymm3,%ymm3 504 vmovdqu 0(%r9),%ymm4 505 vpxor %ymm1,%ymm3,%ymm3 506 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5 507 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1 508 vpunpckhqdq %ymm3,%ymm3,%ymm2 509 vpxor %ymm3,%ymm2,%ymm2 510 vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6 511 512 vbroadcasti128 -144(%r11),%ymm2 513 vaesenc %ymm2,%ymm12,%ymm12 514 vaesenc %ymm2,%ymm13,%ymm13 515 vaesenc %ymm2,%ymm14,%ymm14 516 vaesenc %ymm2,%ymm15,%ymm15 517 518 519 vbroadcasti128 -128(%r11),%ymm2 520 vaesenc %ymm2,%ymm12,%ymm12 521 vaesenc %ymm2,%ymm13,%ymm13 522 vaesenc %ymm2,%ymm14,%ymm14 523 vaesenc %ymm2,%ymm15,%ymm15 524 525 526 vmovdqu 32(%rsi),%ymm3 527 vpshufb %ymm0,%ymm3,%ymm3 528 vmovdqu 32(%r9),%ymm4 529 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 530 vpxor %ymm2,%ymm5,%ymm5 531 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 532 vpxor %ymm2,%ymm1,%ymm1 533 vpunpckhqdq %ymm3,%ymm3,%ymm2 534 vpxor %ymm3,%ymm2,%ymm2 535 vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2 536 vpxor %ymm2,%ymm6,%ymm6 537 538 vbroadcasti128 -112(%r11),%ymm2 539 vaesenc %ymm2,%ymm12,%ymm12 540 vaesenc %ymm2,%ymm13,%ymm13 541 vaesenc %ymm2,%ymm14,%ymm14 542 vaesenc %ymm2,%ymm15,%ymm15 543 544 545 vmovdqu 64(%rsi),%ymm3 546 vpshufb %ymm0,%ymm3,%ymm3 547 vmovdqu 64(%r9),%ymm4 548 549 vbroadcasti128 -96(%r11),%ymm2 550 vaesenc %ymm2,%ymm12,%ymm12 551 vaesenc %ymm2,%ymm13,%ymm13 552 vaesenc %ymm2,%ymm14,%ymm14 553 vaesenc %ymm2,%ymm15,%ymm15 554 555 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 556 vpxor %ymm2,%ymm5,%ymm5 557 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 558 vpxor %ymm2,%ymm1,%ymm1 559 560 vbroadcasti128 -80(%r11),%ymm2 561 vaesenc %ymm2,%ymm12,%ymm12 562 vaesenc %ymm2,%ymm13,%ymm13 563 vaesenc %ymm2,%ymm14,%ymm14 564 vaesenc %ymm2,%ymm15,%ymm15 565 566 vpunpckhqdq %ymm3,%ymm3,%ymm2 567 vpxor %ymm3,%ymm2,%ymm2 568 vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2 569 vpxor %ymm2,%ymm6,%ymm6 570 571 572 vmovdqu 96(%rsi),%ymm3 573 vpshufb %ymm0,%ymm3,%ymm3 574 575 vbroadcasti128 -64(%r11),%ymm2 576 vaesenc %ymm2,%ymm12,%ymm12 577 vaesenc %ymm2,%ymm13,%ymm13 578 vaesenc %ymm2,%ymm14,%ymm14 579 vaesenc %ymm2,%ymm15,%ymm15 580 581 vmovdqu 96(%r9),%ymm4 582 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 583 vpxor %ymm2,%ymm5,%ymm5 584 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 585 vpxor %ymm2,%ymm1,%ymm1 586 vpunpckhqdq %ymm3,%ymm3,%ymm2 587 vpxor %ymm3,%ymm2,%ymm2 588 vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2 589 vpxor %ymm2,%ymm6,%ymm6 590 591 vbroadcasti128 -48(%r11),%ymm2 592 vaesenc %ymm2,%ymm12,%ymm12 593 vaesenc %ymm2,%ymm13,%ymm13 594 vaesenc %ymm2,%ymm14,%ymm14 595 vaesenc %ymm2,%ymm15,%ymm15 596 597 598 vpxor %ymm5,%ymm6,%ymm6 599 vpxor %ymm1,%ymm6,%ymm6 600 601 602 vbroadcasti128 L$gfpoly(%rip),%ymm4 603 vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2 604 vpshufd $0x4e,%ymm5,%ymm5 605 vpxor %ymm5,%ymm6,%ymm6 606 vpxor %ymm2,%ymm6,%ymm6 607 608 vbroadcasti128 -32(%r11),%ymm2 609 vaesenc %ymm2,%ymm12,%ymm12 610 vaesenc %ymm2,%ymm13,%ymm13 611 vaesenc %ymm2,%ymm14,%ymm14 612 vaesenc %ymm2,%ymm15,%ymm15 613 614 615 vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2 616 vpshufd $0x4e,%ymm6,%ymm6 617 vpxor %ymm6,%ymm1,%ymm1 618 vpxor %ymm2,%ymm1,%ymm1 619 620 vbroadcasti128 -16(%r11),%ymm2 621 vaesenc %ymm2,%ymm12,%ymm12 622 vaesenc %ymm2,%ymm13,%ymm13 623 vaesenc %ymm2,%ymm14,%ymm14 624 vaesenc %ymm2,%ymm15,%ymm15 625 626 vextracti128 $1,%ymm1,%xmm2 627 vpxor %xmm2,%xmm1,%xmm1 628 629 630 subq $-128,%rsi 631 vpxor 0(%rdi),%ymm10,%ymm2 632 vpxor 32(%rdi),%ymm10,%ymm3 633 vpxor 64(%rdi),%ymm10,%ymm5 634 vpxor 96(%rdi),%ymm10,%ymm6 635 vaesenclast %ymm2,%ymm12,%ymm12 636 vaesenclast %ymm3,%ymm13,%ymm13 637 vaesenclast %ymm5,%ymm14,%ymm14 638 vaesenclast %ymm6,%ymm15,%ymm15 639 vmovdqu %ymm12,0(%rsi) 640 vmovdqu %ymm13,32(%rsi) 641 vmovdqu %ymm14,64(%rsi) 642 vmovdqu %ymm15,96(%rsi) 643 644 subq $-128,%rdi 645 646 addq $-128,%rdx 647 cmpq $127,%rdx 648 ja L$crypt_loop_4x__func1 649L$ghash_last_ciphertext_4x__func1: 650 651 vmovdqu 0(%rsi),%ymm3 652 vpshufb %ymm0,%ymm3,%ymm3 653 vmovdqu 0(%r9),%ymm4 654 vpxor %ymm1,%ymm3,%ymm3 655 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5 656 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1 657 vpunpckhqdq %ymm3,%ymm3,%ymm2 658 vpxor %ymm3,%ymm2,%ymm2 659 vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6 660 661 vmovdqu 32(%rsi),%ymm3 662 vpshufb %ymm0,%ymm3,%ymm3 663 vmovdqu 32(%r9),%ymm4 664 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 665 vpxor %ymm2,%ymm5,%ymm5 666 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 667 vpxor %ymm2,%ymm1,%ymm1 668 vpunpckhqdq %ymm3,%ymm3,%ymm2 669 vpxor %ymm3,%ymm2,%ymm2 670 vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2 671 vpxor %ymm2,%ymm6,%ymm6 672 673 vmovdqu 64(%rsi),%ymm3 674 vpshufb %ymm0,%ymm3,%ymm3 675 vmovdqu 64(%r9),%ymm4 676 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 677 vpxor %ymm2,%ymm5,%ymm5 678 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 679 vpxor %ymm2,%ymm1,%ymm1 680 vpunpckhqdq %ymm3,%ymm3,%ymm2 681 vpxor %ymm3,%ymm2,%ymm2 682 vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2 683 vpxor %ymm2,%ymm6,%ymm6 684 685 686 vmovdqu 96(%rsi),%ymm3 687 vpshufb %ymm0,%ymm3,%ymm3 688 vmovdqu 96(%r9),%ymm4 689 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 690 vpxor %ymm2,%ymm5,%ymm5 691 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 692 vpxor %ymm2,%ymm1,%ymm1 693 vpunpckhqdq %ymm3,%ymm3,%ymm2 694 vpxor %ymm3,%ymm2,%ymm2 695 vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2 696 vpxor %ymm2,%ymm6,%ymm6 697 698 vpxor %ymm5,%ymm6,%ymm6 699 vpxor %ymm1,%ymm6,%ymm6 700 701 702 vbroadcasti128 L$gfpoly(%rip),%ymm4 703 vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2 704 vpshufd $0x4e,%ymm5,%ymm5 705 vpxor %ymm5,%ymm6,%ymm6 706 vpxor %ymm2,%ymm6,%ymm6 707 708 vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2 709 vpshufd $0x4e,%ymm6,%ymm6 710 vpxor %ymm6,%ymm1,%ymm1 711 vpxor %ymm2,%ymm1,%ymm1 712 vextracti128 $1,%ymm1,%xmm2 713 vpxor %xmm2,%xmm1,%xmm1 714 715 subq $-128,%rsi 716L$crypt_loop_4x_done__func1: 717 718 testq %rdx,%rdx 719 jz L$done__func1 720 721 722 723 724 725 leaq 128(%r9),%r8 726 subq %rdx,%r8 727 728 729 vpxor %xmm5,%xmm5,%xmm5 730 vpxor %xmm6,%xmm6,%xmm6 731 vpxor %xmm7,%xmm7,%xmm7 732 733 cmpq $64,%rdx 734 jb L$lessthan64bytes__func1 735 736 737 vpshufb %ymm0,%ymm11,%ymm12 738 vpaddd L$inc_2blocks(%rip),%ymm11,%ymm11 739 vpshufb %ymm0,%ymm11,%ymm13 740 vpaddd L$inc_2blocks(%rip),%ymm11,%ymm11 741 vpxor %ymm9,%ymm12,%ymm12 742 vpxor %ymm9,%ymm13,%ymm13 743 leaq 16(%rcx),%rax 744L$vaesenc_loop_tail_1__func1: 745 vbroadcasti128 (%rax),%ymm2 746 vaesenc %ymm2,%ymm12,%ymm12 747 vaesenc %ymm2,%ymm13,%ymm13 748 addq $16,%rax 749 cmpq %rax,%r11 750 jne L$vaesenc_loop_tail_1__func1 751 vaesenclast %ymm10,%ymm12,%ymm12 752 vaesenclast %ymm10,%ymm13,%ymm13 753 754 755 vmovdqu 0(%rdi),%ymm2 756 vmovdqu 32(%rdi),%ymm3 757 vpxor %ymm2,%ymm12,%ymm12 758 vpxor %ymm3,%ymm13,%ymm13 759 vmovdqu %ymm12,0(%rsi) 760 vmovdqu %ymm13,32(%rsi) 761 762 763 vpshufb %ymm0,%ymm12,%ymm12 764 vpshufb %ymm0,%ymm13,%ymm13 765 vpxor %ymm1,%ymm12,%ymm12 766 vmovdqu (%r8),%ymm2 767 vmovdqu 32(%r8),%ymm3 768 vpclmulqdq $0x00,%ymm2,%ymm12,%ymm5 769 vpclmulqdq $0x01,%ymm2,%ymm12,%ymm6 770 vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 771 vpxor %ymm4,%ymm6,%ymm6 772 vpclmulqdq $0x11,%ymm2,%ymm12,%ymm7 773 vpclmulqdq $0x00,%ymm3,%ymm13,%ymm4 774 vpxor %ymm4,%ymm5,%ymm5 775 vpclmulqdq $0x01,%ymm3,%ymm13,%ymm4 776 vpxor %ymm4,%ymm6,%ymm6 777 vpclmulqdq $0x10,%ymm3,%ymm13,%ymm4 778 vpxor %ymm4,%ymm6,%ymm6 779 vpclmulqdq $0x11,%ymm3,%ymm13,%ymm4 780 vpxor %ymm4,%ymm7,%ymm7 781 782 addq $64,%r8 783 addq $64,%rdi 784 addq $64,%rsi 785 subq $64,%rdx 786 jz L$reduce__func1 787 788 vpxor %xmm1,%xmm1,%xmm1 789 790 791L$lessthan64bytes__func1: 792 vpshufb %ymm0,%ymm11,%ymm12 793 vpaddd L$inc_2blocks(%rip),%ymm11,%ymm11 794 vpshufb %ymm0,%ymm11,%ymm13 795 vpxor %ymm9,%ymm12,%ymm12 796 vpxor %ymm9,%ymm13,%ymm13 797 leaq 16(%rcx),%rax 798L$vaesenc_loop_tail_2__func1: 799 vbroadcasti128 (%rax),%ymm2 800 vaesenc %ymm2,%ymm12,%ymm12 801 vaesenc %ymm2,%ymm13,%ymm13 802 addq $16,%rax 803 cmpq %rax,%r11 804 jne L$vaesenc_loop_tail_2__func1 805 vaesenclast %ymm10,%ymm12,%ymm12 806 vaesenclast %ymm10,%ymm13,%ymm13 807 808 809 810 811 cmpq $32,%rdx 812 jb L$xor_one_block__func1 813 je L$xor_two_blocks__func1 814 815L$xor_three_blocks__func1: 816 vmovdqu 0(%rdi),%ymm2 817 vmovdqu 32(%rdi),%xmm3 818 vpxor %ymm2,%ymm12,%ymm12 819 vpxor %xmm3,%xmm13,%xmm13 820 vmovdqu %ymm12,0(%rsi) 821 vmovdqu %xmm13,32(%rsi) 822 823 vpshufb %ymm0,%ymm12,%ymm12 824 vpshufb %xmm0,%xmm13,%xmm13 825 vpxor %ymm1,%ymm12,%ymm12 826 vmovdqu (%r8),%ymm2 827 vmovdqu 32(%r8),%xmm3 828 vpclmulqdq $0x00,%xmm3,%xmm13,%xmm4 829 vpxor %ymm4,%ymm5,%ymm5 830 vpclmulqdq $0x01,%xmm3,%xmm13,%xmm4 831 vpxor %ymm4,%ymm6,%ymm6 832 vpclmulqdq $0x10,%xmm3,%xmm13,%xmm4 833 vpxor %ymm4,%ymm6,%ymm6 834 vpclmulqdq $0x11,%xmm3,%xmm13,%xmm4 835 vpxor %ymm4,%ymm7,%ymm7 836 jmp L$ghash_mul_one_vec_unreduced__func1 837 838L$xor_two_blocks__func1: 839 vmovdqu (%rdi),%ymm2 840 vpxor %ymm2,%ymm12,%ymm12 841 vmovdqu %ymm12,(%rsi) 842 vpshufb %ymm0,%ymm12,%ymm12 843 vpxor %ymm1,%ymm12,%ymm12 844 vmovdqu (%r8),%ymm2 845 jmp L$ghash_mul_one_vec_unreduced__func1 846 847L$xor_one_block__func1: 848 vmovdqu (%rdi),%xmm2 849 vpxor %xmm2,%xmm12,%xmm12 850 vmovdqu %xmm12,(%rsi) 851 vpshufb %xmm0,%xmm12,%xmm12 852 vpxor %xmm1,%xmm12,%xmm12 853 vmovdqu (%r8),%xmm2 854 855L$ghash_mul_one_vec_unreduced__func1: 856 vpclmulqdq $0x00,%ymm2,%ymm12,%ymm4 857 vpxor %ymm4,%ymm5,%ymm5 858 vpclmulqdq $0x01,%ymm2,%ymm12,%ymm4 859 vpxor %ymm4,%ymm6,%ymm6 860 vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 861 vpxor %ymm4,%ymm6,%ymm6 862 vpclmulqdq $0x11,%ymm2,%ymm12,%ymm4 863 vpxor %ymm4,%ymm7,%ymm7 864 865L$reduce__func1: 866 867 vbroadcasti128 L$gfpoly(%rip),%ymm2 868 vpclmulqdq $0x01,%ymm5,%ymm2,%ymm3 869 vpshufd $0x4e,%ymm5,%ymm5 870 vpxor %ymm5,%ymm6,%ymm6 871 vpxor %ymm3,%ymm6,%ymm6 872 vpclmulqdq $0x01,%ymm6,%ymm2,%ymm3 873 vpshufd $0x4e,%ymm6,%ymm6 874 vpxor %ymm6,%ymm7,%ymm7 875 vpxor %ymm3,%ymm7,%ymm7 876 vextracti128 $1,%ymm7,%xmm1 877 vpxor %xmm7,%xmm1,%xmm1 878 879L$done__func1: 880 881 vpshufb %xmm0,%xmm1,%xmm1 882 vmovdqu %xmm1,(%r12) 883 884 vzeroupper 885 popq %r12 886 887 ret 888 889 890 891.globl _aes_gcm_dec_update_vaes_avx2 892.private_extern _aes_gcm_dec_update_vaes_avx2 893 894.p2align 5 895_aes_gcm_dec_update_vaes_avx2: 896 897 898_CET_ENDBR 899 pushq %r12 900 901 902 movq 16(%rsp),%r12 903 vbroadcasti128 L$bswap_mask(%rip),%ymm0 904 905 906 907 vmovdqu (%r12),%xmm1 908 vpshufb %xmm0,%xmm1,%xmm1 909 vbroadcasti128 (%r8),%ymm11 910 vpshufb %ymm0,%ymm11,%ymm11 911 912 913 914 movl 240(%rcx),%r10d 915 leal -20(,%r10,4),%r10d 916 917 918 919 920 leaq 96(%rcx,%r10,4),%r11 921 vbroadcasti128 (%rcx),%ymm9 922 vbroadcasti128 (%r11),%ymm10 923 924 925 vpaddd L$ctr_pattern(%rip),%ymm11,%ymm11 926 927 928 929 cmpq $127,%rdx 930 jbe L$crypt_loop_4x_done__func2 931 932 vmovdqu 128(%r9),%ymm7 933 vmovdqu 128+32(%r9),%ymm8 934.p2align 4 935L$crypt_loop_4x__func2: 936 937 938 939 940 vmovdqu L$inc_2blocks(%rip),%ymm2 941 vpshufb %ymm0,%ymm11,%ymm12 942 vpaddd %ymm2,%ymm11,%ymm11 943 vpshufb %ymm0,%ymm11,%ymm13 944 vpaddd %ymm2,%ymm11,%ymm11 945 vpshufb %ymm0,%ymm11,%ymm14 946 vpaddd %ymm2,%ymm11,%ymm11 947 vpshufb %ymm0,%ymm11,%ymm15 948 vpaddd %ymm2,%ymm11,%ymm11 949 950 951 vpxor %ymm9,%ymm12,%ymm12 952 vpxor %ymm9,%ymm13,%ymm13 953 vpxor %ymm9,%ymm14,%ymm14 954 vpxor %ymm9,%ymm15,%ymm15 955 956 cmpl $24,%r10d 957 jl L$aes128__func2 958 je L$aes192__func2 959 960 vbroadcasti128 -208(%r11),%ymm2 961 vaesenc %ymm2,%ymm12,%ymm12 962 vaesenc %ymm2,%ymm13,%ymm13 963 vaesenc %ymm2,%ymm14,%ymm14 964 vaesenc %ymm2,%ymm15,%ymm15 965 966 vbroadcasti128 -192(%r11),%ymm2 967 vaesenc %ymm2,%ymm12,%ymm12 968 vaesenc %ymm2,%ymm13,%ymm13 969 vaesenc %ymm2,%ymm14,%ymm14 970 vaesenc %ymm2,%ymm15,%ymm15 971 972L$aes192__func2: 973 vbroadcasti128 -176(%r11),%ymm2 974 vaesenc %ymm2,%ymm12,%ymm12 975 vaesenc %ymm2,%ymm13,%ymm13 976 vaesenc %ymm2,%ymm14,%ymm14 977 vaesenc %ymm2,%ymm15,%ymm15 978 979 vbroadcasti128 -160(%r11),%ymm2 980 vaesenc %ymm2,%ymm12,%ymm12 981 vaesenc %ymm2,%ymm13,%ymm13 982 vaesenc %ymm2,%ymm14,%ymm14 983 vaesenc %ymm2,%ymm15,%ymm15 984 985L$aes128__func2: 986 987 vmovdqu 0(%rdi),%ymm3 988 vpshufb %ymm0,%ymm3,%ymm3 989 vmovdqu 0(%r9),%ymm4 990 vpxor %ymm1,%ymm3,%ymm3 991 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5 992 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1 993 vpunpckhqdq %ymm3,%ymm3,%ymm2 994 vpxor %ymm3,%ymm2,%ymm2 995 vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6 996 997 vbroadcasti128 -144(%r11),%ymm2 998 vaesenc %ymm2,%ymm12,%ymm12 999 vaesenc %ymm2,%ymm13,%ymm13 1000 vaesenc %ymm2,%ymm14,%ymm14 1001 vaesenc %ymm2,%ymm15,%ymm15 1002 1003 1004 vbroadcasti128 -128(%r11),%ymm2 1005 vaesenc %ymm2,%ymm12,%ymm12 1006 vaesenc %ymm2,%ymm13,%ymm13 1007 vaesenc %ymm2,%ymm14,%ymm14 1008 vaesenc %ymm2,%ymm15,%ymm15 1009 1010 1011 vmovdqu 32(%rdi),%ymm3 1012 vpshufb %ymm0,%ymm3,%ymm3 1013 vmovdqu 32(%r9),%ymm4 1014 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 1015 vpxor %ymm2,%ymm5,%ymm5 1016 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 1017 vpxor %ymm2,%ymm1,%ymm1 1018 vpunpckhqdq %ymm3,%ymm3,%ymm2 1019 vpxor %ymm3,%ymm2,%ymm2 1020 vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2 1021 vpxor %ymm2,%ymm6,%ymm6 1022 1023 vbroadcasti128 -112(%r11),%ymm2 1024 vaesenc %ymm2,%ymm12,%ymm12 1025 vaesenc %ymm2,%ymm13,%ymm13 1026 vaesenc %ymm2,%ymm14,%ymm14 1027 vaesenc %ymm2,%ymm15,%ymm15 1028 1029 1030 vmovdqu 64(%rdi),%ymm3 1031 vpshufb %ymm0,%ymm3,%ymm3 1032 vmovdqu 64(%r9),%ymm4 1033 1034 vbroadcasti128 -96(%r11),%ymm2 1035 vaesenc %ymm2,%ymm12,%ymm12 1036 vaesenc %ymm2,%ymm13,%ymm13 1037 vaesenc %ymm2,%ymm14,%ymm14 1038 vaesenc %ymm2,%ymm15,%ymm15 1039 1040 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 1041 vpxor %ymm2,%ymm5,%ymm5 1042 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 1043 vpxor %ymm2,%ymm1,%ymm1 1044 1045 vbroadcasti128 -80(%r11),%ymm2 1046 vaesenc %ymm2,%ymm12,%ymm12 1047 vaesenc %ymm2,%ymm13,%ymm13 1048 vaesenc %ymm2,%ymm14,%ymm14 1049 vaesenc %ymm2,%ymm15,%ymm15 1050 1051 vpunpckhqdq %ymm3,%ymm3,%ymm2 1052 vpxor %ymm3,%ymm2,%ymm2 1053 vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2 1054 vpxor %ymm2,%ymm6,%ymm6 1055 1056 1057 vmovdqu 96(%rdi),%ymm3 1058 vpshufb %ymm0,%ymm3,%ymm3 1059 1060 vbroadcasti128 -64(%r11),%ymm2 1061 vaesenc %ymm2,%ymm12,%ymm12 1062 vaesenc %ymm2,%ymm13,%ymm13 1063 vaesenc %ymm2,%ymm14,%ymm14 1064 vaesenc %ymm2,%ymm15,%ymm15 1065 1066 vmovdqu 96(%r9),%ymm4 1067 vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 1068 vpxor %ymm2,%ymm5,%ymm5 1069 vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 1070 vpxor %ymm2,%ymm1,%ymm1 1071 vpunpckhqdq %ymm3,%ymm3,%ymm2 1072 vpxor %ymm3,%ymm2,%ymm2 1073 vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2 1074 vpxor %ymm2,%ymm6,%ymm6 1075 1076 vbroadcasti128 -48(%r11),%ymm2 1077 vaesenc %ymm2,%ymm12,%ymm12 1078 vaesenc %ymm2,%ymm13,%ymm13 1079 vaesenc %ymm2,%ymm14,%ymm14 1080 vaesenc %ymm2,%ymm15,%ymm15 1081 1082 1083 vpxor %ymm5,%ymm6,%ymm6 1084 vpxor %ymm1,%ymm6,%ymm6 1085 1086 1087 vbroadcasti128 L$gfpoly(%rip),%ymm4 1088 vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2 1089 vpshufd $0x4e,%ymm5,%ymm5 1090 vpxor %ymm5,%ymm6,%ymm6 1091 vpxor %ymm2,%ymm6,%ymm6 1092 1093 vbroadcasti128 -32(%r11),%ymm2 1094 vaesenc %ymm2,%ymm12,%ymm12 1095 vaesenc %ymm2,%ymm13,%ymm13 1096 vaesenc %ymm2,%ymm14,%ymm14 1097 vaesenc %ymm2,%ymm15,%ymm15 1098 1099 1100 vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2 1101 vpshufd $0x4e,%ymm6,%ymm6 1102 vpxor %ymm6,%ymm1,%ymm1 1103 vpxor %ymm2,%ymm1,%ymm1 1104 1105 vbroadcasti128 -16(%r11),%ymm2 1106 vaesenc %ymm2,%ymm12,%ymm12 1107 vaesenc %ymm2,%ymm13,%ymm13 1108 vaesenc %ymm2,%ymm14,%ymm14 1109 vaesenc %ymm2,%ymm15,%ymm15 1110 1111 vextracti128 $1,%ymm1,%xmm2 1112 vpxor %xmm2,%xmm1,%xmm1 1113 1114 1115 1116 vpxor 0(%rdi),%ymm10,%ymm2 1117 vpxor 32(%rdi),%ymm10,%ymm3 1118 vpxor 64(%rdi),%ymm10,%ymm5 1119 vpxor 96(%rdi),%ymm10,%ymm6 1120 vaesenclast %ymm2,%ymm12,%ymm12 1121 vaesenclast %ymm3,%ymm13,%ymm13 1122 vaesenclast %ymm5,%ymm14,%ymm14 1123 vaesenclast %ymm6,%ymm15,%ymm15 1124 vmovdqu %ymm12,0(%rsi) 1125 vmovdqu %ymm13,32(%rsi) 1126 vmovdqu %ymm14,64(%rsi) 1127 vmovdqu %ymm15,96(%rsi) 1128 1129 subq $-128,%rdi 1130 subq $-128,%rsi 1131 addq $-128,%rdx 1132 cmpq $127,%rdx 1133 ja L$crypt_loop_4x__func2 1134L$crypt_loop_4x_done__func2: 1135 1136 testq %rdx,%rdx 1137 jz L$done__func2 1138 1139 1140 1141 1142 1143 leaq 128(%r9),%r8 1144 subq %rdx,%r8 1145 1146 1147 vpxor %xmm5,%xmm5,%xmm5 1148 vpxor %xmm6,%xmm6,%xmm6 1149 vpxor %xmm7,%xmm7,%xmm7 1150 1151 cmpq $64,%rdx 1152 jb L$lessthan64bytes__func2 1153 1154 1155 vpshufb %ymm0,%ymm11,%ymm12 1156 vpaddd L$inc_2blocks(%rip),%ymm11,%ymm11 1157 vpshufb %ymm0,%ymm11,%ymm13 1158 vpaddd L$inc_2blocks(%rip),%ymm11,%ymm11 1159 vpxor %ymm9,%ymm12,%ymm12 1160 vpxor %ymm9,%ymm13,%ymm13 1161 leaq 16(%rcx),%rax 1162L$vaesenc_loop_tail_1__func2: 1163 vbroadcasti128 (%rax),%ymm2 1164 vaesenc %ymm2,%ymm12,%ymm12 1165 vaesenc %ymm2,%ymm13,%ymm13 1166 addq $16,%rax 1167 cmpq %rax,%r11 1168 jne L$vaesenc_loop_tail_1__func2 1169 vaesenclast %ymm10,%ymm12,%ymm12 1170 vaesenclast %ymm10,%ymm13,%ymm13 1171 1172 1173 vmovdqu 0(%rdi),%ymm2 1174 vmovdqu 32(%rdi),%ymm3 1175 vpxor %ymm2,%ymm12,%ymm12 1176 vpxor %ymm3,%ymm13,%ymm13 1177 vmovdqu %ymm12,0(%rsi) 1178 vmovdqu %ymm13,32(%rsi) 1179 1180 1181 vpshufb %ymm0,%ymm2,%ymm12 1182 vpshufb %ymm0,%ymm3,%ymm13 1183 vpxor %ymm1,%ymm12,%ymm12 1184 vmovdqu (%r8),%ymm2 1185 vmovdqu 32(%r8),%ymm3 1186 vpclmulqdq $0x00,%ymm2,%ymm12,%ymm5 1187 vpclmulqdq $0x01,%ymm2,%ymm12,%ymm6 1188 vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 1189 vpxor %ymm4,%ymm6,%ymm6 1190 vpclmulqdq $0x11,%ymm2,%ymm12,%ymm7 1191 vpclmulqdq $0x00,%ymm3,%ymm13,%ymm4 1192 vpxor %ymm4,%ymm5,%ymm5 1193 vpclmulqdq $0x01,%ymm3,%ymm13,%ymm4 1194 vpxor %ymm4,%ymm6,%ymm6 1195 vpclmulqdq $0x10,%ymm3,%ymm13,%ymm4 1196 vpxor %ymm4,%ymm6,%ymm6 1197 vpclmulqdq $0x11,%ymm3,%ymm13,%ymm4 1198 vpxor %ymm4,%ymm7,%ymm7 1199 1200 addq $64,%r8 1201 addq $64,%rdi 1202 addq $64,%rsi 1203 subq $64,%rdx 1204 jz L$reduce__func2 1205 1206 vpxor %xmm1,%xmm1,%xmm1 1207 1208 1209L$lessthan64bytes__func2: 1210 vpshufb %ymm0,%ymm11,%ymm12 1211 vpaddd L$inc_2blocks(%rip),%ymm11,%ymm11 1212 vpshufb %ymm0,%ymm11,%ymm13 1213 vpxor %ymm9,%ymm12,%ymm12 1214 vpxor %ymm9,%ymm13,%ymm13 1215 leaq 16(%rcx),%rax 1216L$vaesenc_loop_tail_2__func2: 1217 vbroadcasti128 (%rax),%ymm2 1218 vaesenc %ymm2,%ymm12,%ymm12 1219 vaesenc %ymm2,%ymm13,%ymm13 1220 addq $16,%rax 1221 cmpq %rax,%r11 1222 jne L$vaesenc_loop_tail_2__func2 1223 vaesenclast %ymm10,%ymm12,%ymm12 1224 vaesenclast %ymm10,%ymm13,%ymm13 1225 1226 1227 1228 1229 cmpq $32,%rdx 1230 jb L$xor_one_block__func2 1231 je L$xor_two_blocks__func2 1232 1233L$xor_three_blocks__func2: 1234 vmovdqu 0(%rdi),%ymm2 1235 vmovdqu 32(%rdi),%xmm3 1236 vpxor %ymm2,%ymm12,%ymm12 1237 vpxor %xmm3,%xmm13,%xmm13 1238 vmovdqu %ymm12,0(%rsi) 1239 vmovdqu %xmm13,32(%rsi) 1240 1241 vpshufb %ymm0,%ymm2,%ymm12 1242 vpshufb %xmm0,%xmm3,%xmm13 1243 vpxor %ymm1,%ymm12,%ymm12 1244 vmovdqu (%r8),%ymm2 1245 vmovdqu 32(%r8),%xmm3 1246 vpclmulqdq $0x00,%xmm3,%xmm13,%xmm4 1247 vpxor %ymm4,%ymm5,%ymm5 1248 vpclmulqdq $0x01,%xmm3,%xmm13,%xmm4 1249 vpxor %ymm4,%ymm6,%ymm6 1250 vpclmulqdq $0x10,%xmm3,%xmm13,%xmm4 1251 vpxor %ymm4,%ymm6,%ymm6 1252 vpclmulqdq $0x11,%xmm3,%xmm13,%xmm4 1253 vpxor %ymm4,%ymm7,%ymm7 1254 jmp L$ghash_mul_one_vec_unreduced__func2 1255 1256L$xor_two_blocks__func2: 1257 vmovdqu (%rdi),%ymm2 1258 vpxor %ymm2,%ymm12,%ymm12 1259 vmovdqu %ymm12,(%rsi) 1260 vpshufb %ymm0,%ymm2,%ymm12 1261 vpxor %ymm1,%ymm12,%ymm12 1262 vmovdqu (%r8),%ymm2 1263 jmp L$ghash_mul_one_vec_unreduced__func2 1264 1265L$xor_one_block__func2: 1266 vmovdqu (%rdi),%xmm2 1267 vpxor %xmm2,%xmm12,%xmm12 1268 vmovdqu %xmm12,(%rsi) 1269 vpshufb %xmm0,%xmm2,%xmm12 1270 vpxor %xmm1,%xmm12,%xmm12 1271 vmovdqu (%r8),%xmm2 1272 1273L$ghash_mul_one_vec_unreduced__func2: 1274 vpclmulqdq $0x00,%ymm2,%ymm12,%ymm4 1275 vpxor %ymm4,%ymm5,%ymm5 1276 vpclmulqdq $0x01,%ymm2,%ymm12,%ymm4 1277 vpxor %ymm4,%ymm6,%ymm6 1278 vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 1279 vpxor %ymm4,%ymm6,%ymm6 1280 vpclmulqdq $0x11,%ymm2,%ymm12,%ymm4 1281 vpxor %ymm4,%ymm7,%ymm7 1282 1283L$reduce__func2: 1284 1285 vbroadcasti128 L$gfpoly(%rip),%ymm2 1286 vpclmulqdq $0x01,%ymm5,%ymm2,%ymm3 1287 vpshufd $0x4e,%ymm5,%ymm5 1288 vpxor %ymm5,%ymm6,%ymm6 1289 vpxor %ymm3,%ymm6,%ymm6 1290 vpclmulqdq $0x01,%ymm6,%ymm2,%ymm3 1291 vpshufd $0x4e,%ymm6,%ymm6 1292 vpxor %ymm6,%ymm7,%ymm7 1293 vpxor %ymm3,%ymm7,%ymm7 1294 vextracti128 $1,%ymm7,%xmm1 1295 vpxor %xmm7,%xmm1,%xmm1 1296 1297L$done__func2: 1298 1299 vpshufb %xmm0,%xmm1,%xmm1 1300 vmovdqu %xmm1,(%r12) 1301 1302 vzeroupper 1303 popq %r12 1304 1305 ret 1306 1307 1308 1309#endif 1310