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