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.data 15 16.p2align 4 17one: 18.quad 1,0 19two: 20.quad 2,0 21three: 22.quad 3,0 23four: 24.quad 4,0 25five: 26.quad 5,0 27six: 28.quad 6,0 29seven: 30.quad 7,0 31eight: 32.quad 8,0 33 34OR_MASK: 35.long 0x00000000,0x00000000,0x00000000,0x80000000 36poly: 37.quad 0x1, 0xc200000000000000 38mask: 39.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d 40con1: 41.long 1,1,1,1 42con2: 43.long 0x1b,0x1b,0x1b,0x1b 44con3: 45.byte -1,-1,-1,-1,-1,-1,-1,-1,4,5,6,7,4,5,6,7 46and_mask: 47.long 0,0xffffffff, 0xffffffff, 0xffffffff 48.text 49 50.p2align 4 51GFMUL: 52 53 vpclmulqdq $0x00,%xmm1,%xmm0,%xmm2 54 vpclmulqdq $0x11,%xmm1,%xmm0,%xmm5 55 vpclmulqdq $0x10,%xmm1,%xmm0,%xmm3 56 vpclmulqdq $0x01,%xmm1,%xmm0,%xmm4 57 vpxor %xmm4,%xmm3,%xmm3 58 vpslldq $8,%xmm3,%xmm4 59 vpsrldq $8,%xmm3,%xmm3 60 vpxor %xmm4,%xmm2,%xmm2 61 vpxor %xmm3,%xmm5,%xmm5 62 63 vpclmulqdq $0x10,poly(%rip),%xmm2,%xmm3 64 vpshufd $78,%xmm2,%xmm4 65 vpxor %xmm4,%xmm3,%xmm2 66 67 vpclmulqdq $0x10,poly(%rip),%xmm2,%xmm3 68 vpshufd $78,%xmm2,%xmm4 69 vpxor %xmm4,%xmm3,%xmm2 70 71 vpxor %xmm5,%xmm2,%xmm0 72 .byte 0xf3,0xc3 73 74 75.globl _aesgcmsiv_htable_init 76.private_extern _aesgcmsiv_htable_init 77 78.p2align 4 79_aesgcmsiv_htable_init: 80 81 vmovdqa (%rsi),%xmm0 82 vmovdqa %xmm0,%xmm1 83 vmovdqa %xmm0,(%rdi) 84 call GFMUL 85 vmovdqa %xmm0,16(%rdi) 86 call GFMUL 87 vmovdqa %xmm0,32(%rdi) 88 call GFMUL 89 vmovdqa %xmm0,48(%rdi) 90 call GFMUL 91 vmovdqa %xmm0,64(%rdi) 92 call GFMUL 93 vmovdqa %xmm0,80(%rdi) 94 call GFMUL 95 vmovdqa %xmm0,96(%rdi) 96 call GFMUL 97 vmovdqa %xmm0,112(%rdi) 98 .byte 0xf3,0xc3 99 100 101.globl _aesgcmsiv_htable6_init 102.private_extern _aesgcmsiv_htable6_init 103 104.p2align 4 105_aesgcmsiv_htable6_init: 106 107 vmovdqa (%rsi),%xmm0 108 vmovdqa %xmm0,%xmm1 109 vmovdqa %xmm0,(%rdi) 110 call GFMUL 111 vmovdqa %xmm0,16(%rdi) 112 call GFMUL 113 vmovdqa %xmm0,32(%rdi) 114 call GFMUL 115 vmovdqa %xmm0,48(%rdi) 116 call GFMUL 117 vmovdqa %xmm0,64(%rdi) 118 call GFMUL 119 vmovdqa %xmm0,80(%rdi) 120 .byte 0xf3,0xc3 121 122 123.globl _aesgcmsiv_htable_polyval 124.private_extern _aesgcmsiv_htable_polyval 125 126.p2align 4 127_aesgcmsiv_htable_polyval: 128 129 testq %rdx,%rdx 130 jnz L$htable_polyval_start 131 .byte 0xf3,0xc3 132 133L$htable_polyval_start: 134 vzeroall 135 136 137 138 movq %rdx,%r11 139 andq $127,%r11 140 141 jz L$htable_polyval_no_prefix 142 143 vpxor %xmm9,%xmm9,%xmm9 144 vmovdqa (%rcx),%xmm1 145 subq %r11,%rdx 146 147 subq $16,%r11 148 149 150 vmovdqu (%rsi),%xmm0 151 vpxor %xmm1,%xmm0,%xmm0 152 153 vpclmulqdq $0x01,(%rdi,%r11,1),%xmm0,%xmm5 154 vpclmulqdq $0x00,(%rdi,%r11,1),%xmm0,%xmm3 155 vpclmulqdq $0x11,(%rdi,%r11,1),%xmm0,%xmm4 156 vpclmulqdq $0x10,(%rdi,%r11,1),%xmm0,%xmm6 157 vpxor %xmm6,%xmm5,%xmm5 158 159 leaq 16(%rsi),%rsi 160 testq %r11,%r11 161 jnz L$htable_polyval_prefix_loop 162 jmp L$htable_polyval_prefix_complete 163 164 165.p2align 6 166L$htable_polyval_prefix_loop: 167 subq $16,%r11 168 169 vmovdqu (%rsi),%xmm0 170 171 vpclmulqdq $0x00,(%rdi,%r11,1),%xmm0,%xmm6 172 vpxor %xmm6,%xmm3,%xmm3 173 vpclmulqdq $0x11,(%rdi,%r11,1),%xmm0,%xmm6 174 vpxor %xmm6,%xmm4,%xmm4 175 vpclmulqdq $0x01,(%rdi,%r11,1),%xmm0,%xmm6 176 vpxor %xmm6,%xmm5,%xmm5 177 vpclmulqdq $0x10,(%rdi,%r11,1),%xmm0,%xmm6 178 vpxor %xmm6,%xmm5,%xmm5 179 180 testq %r11,%r11 181 182 leaq 16(%rsi),%rsi 183 184 jnz L$htable_polyval_prefix_loop 185 186L$htable_polyval_prefix_complete: 187 vpsrldq $8,%xmm5,%xmm6 188 vpslldq $8,%xmm5,%xmm5 189 190 vpxor %xmm6,%xmm4,%xmm9 191 vpxor %xmm5,%xmm3,%xmm1 192 193 jmp L$htable_polyval_main_loop 194 195L$htable_polyval_no_prefix: 196 197 198 199 200 vpxor %xmm1,%xmm1,%xmm1 201 vmovdqa (%rcx),%xmm9 202 203.p2align 6 204L$htable_polyval_main_loop: 205 subq $0x80,%rdx 206 jb L$htable_polyval_out 207 208 vmovdqu 112(%rsi),%xmm0 209 210 vpclmulqdq $0x01,(%rdi),%xmm0,%xmm5 211 vpclmulqdq $0x00,(%rdi),%xmm0,%xmm3 212 vpclmulqdq $0x11,(%rdi),%xmm0,%xmm4 213 vpclmulqdq $0x10,(%rdi),%xmm0,%xmm6 214 vpxor %xmm6,%xmm5,%xmm5 215 216 217 vmovdqu 96(%rsi),%xmm0 218 vpclmulqdq $0x01,16(%rdi),%xmm0,%xmm6 219 vpxor %xmm6,%xmm5,%xmm5 220 vpclmulqdq $0x00,16(%rdi),%xmm0,%xmm6 221 vpxor %xmm6,%xmm3,%xmm3 222 vpclmulqdq $0x11,16(%rdi),%xmm0,%xmm6 223 vpxor %xmm6,%xmm4,%xmm4 224 vpclmulqdq $0x10,16(%rdi),%xmm0,%xmm6 225 vpxor %xmm6,%xmm5,%xmm5 226 227 228 229 vmovdqu 80(%rsi),%xmm0 230 231 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm7 232 vpalignr $8,%xmm1,%xmm1,%xmm1 233 234 vpclmulqdq $0x01,32(%rdi),%xmm0,%xmm6 235 vpxor %xmm6,%xmm5,%xmm5 236 vpclmulqdq $0x00,32(%rdi),%xmm0,%xmm6 237 vpxor %xmm6,%xmm3,%xmm3 238 vpclmulqdq $0x11,32(%rdi),%xmm0,%xmm6 239 vpxor %xmm6,%xmm4,%xmm4 240 vpclmulqdq $0x10,32(%rdi),%xmm0,%xmm6 241 vpxor %xmm6,%xmm5,%xmm5 242 243 244 vpxor %xmm7,%xmm1,%xmm1 245 246 vmovdqu 64(%rsi),%xmm0 247 248 vpclmulqdq $0x01,48(%rdi),%xmm0,%xmm6 249 vpxor %xmm6,%xmm5,%xmm5 250 vpclmulqdq $0x00,48(%rdi),%xmm0,%xmm6 251 vpxor %xmm6,%xmm3,%xmm3 252 vpclmulqdq $0x11,48(%rdi),%xmm0,%xmm6 253 vpxor %xmm6,%xmm4,%xmm4 254 vpclmulqdq $0x10,48(%rdi),%xmm0,%xmm6 255 vpxor %xmm6,%xmm5,%xmm5 256 257 258 vmovdqu 48(%rsi),%xmm0 259 260 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm7 261 vpalignr $8,%xmm1,%xmm1,%xmm1 262 263 vpclmulqdq $0x01,64(%rdi),%xmm0,%xmm6 264 vpxor %xmm6,%xmm5,%xmm5 265 vpclmulqdq $0x00,64(%rdi),%xmm0,%xmm6 266 vpxor %xmm6,%xmm3,%xmm3 267 vpclmulqdq $0x11,64(%rdi),%xmm0,%xmm6 268 vpxor %xmm6,%xmm4,%xmm4 269 vpclmulqdq $0x10,64(%rdi),%xmm0,%xmm6 270 vpxor %xmm6,%xmm5,%xmm5 271 272 273 vpxor %xmm7,%xmm1,%xmm1 274 275 vmovdqu 32(%rsi),%xmm0 276 277 vpclmulqdq $0x01,80(%rdi),%xmm0,%xmm6 278 vpxor %xmm6,%xmm5,%xmm5 279 vpclmulqdq $0x00,80(%rdi),%xmm0,%xmm6 280 vpxor %xmm6,%xmm3,%xmm3 281 vpclmulqdq $0x11,80(%rdi),%xmm0,%xmm6 282 vpxor %xmm6,%xmm4,%xmm4 283 vpclmulqdq $0x10,80(%rdi),%xmm0,%xmm6 284 vpxor %xmm6,%xmm5,%xmm5 285 286 287 vpxor %xmm9,%xmm1,%xmm1 288 289 vmovdqu 16(%rsi),%xmm0 290 291 vpclmulqdq $0x01,96(%rdi),%xmm0,%xmm6 292 vpxor %xmm6,%xmm5,%xmm5 293 vpclmulqdq $0x00,96(%rdi),%xmm0,%xmm6 294 vpxor %xmm6,%xmm3,%xmm3 295 vpclmulqdq $0x11,96(%rdi),%xmm0,%xmm6 296 vpxor %xmm6,%xmm4,%xmm4 297 vpclmulqdq $0x10,96(%rdi),%xmm0,%xmm6 298 vpxor %xmm6,%xmm5,%xmm5 299 300 301 vmovdqu 0(%rsi),%xmm0 302 vpxor %xmm1,%xmm0,%xmm0 303 304 vpclmulqdq $0x01,112(%rdi),%xmm0,%xmm6 305 vpxor %xmm6,%xmm5,%xmm5 306 vpclmulqdq $0x00,112(%rdi),%xmm0,%xmm6 307 vpxor %xmm6,%xmm3,%xmm3 308 vpclmulqdq $0x11,112(%rdi),%xmm0,%xmm6 309 vpxor %xmm6,%xmm4,%xmm4 310 vpclmulqdq $0x10,112(%rdi),%xmm0,%xmm6 311 vpxor %xmm6,%xmm5,%xmm5 312 313 314 vpsrldq $8,%xmm5,%xmm6 315 vpslldq $8,%xmm5,%xmm5 316 317 vpxor %xmm6,%xmm4,%xmm9 318 vpxor %xmm5,%xmm3,%xmm1 319 320 leaq 128(%rsi),%rsi 321 jmp L$htable_polyval_main_loop 322 323 324 325L$htable_polyval_out: 326 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm6 327 vpalignr $8,%xmm1,%xmm1,%xmm1 328 vpxor %xmm6,%xmm1,%xmm1 329 330 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm6 331 vpalignr $8,%xmm1,%xmm1,%xmm1 332 vpxor %xmm6,%xmm1,%xmm1 333 vpxor %xmm9,%xmm1,%xmm1 334 335 vmovdqu %xmm1,(%rcx) 336 vzeroupper 337 .byte 0xf3,0xc3 338 339 340.globl _aesgcmsiv_polyval_horner 341.private_extern _aesgcmsiv_polyval_horner 342 343.p2align 4 344_aesgcmsiv_polyval_horner: 345 346 testq %rcx,%rcx 347 jnz L$polyval_horner_start 348 .byte 0xf3,0xc3 349 350L$polyval_horner_start: 351 352 353 354 xorq %r10,%r10 355 shlq $4,%rcx 356 357 vmovdqa (%rsi),%xmm1 358 vmovdqa (%rdi),%xmm0 359 360L$polyval_horner_loop: 361 vpxor (%rdx,%r10,1),%xmm0,%xmm0 362 call GFMUL 363 364 addq $16,%r10 365 cmpq %r10,%rcx 366 jne L$polyval_horner_loop 367 368 369 vmovdqa %xmm0,(%rdi) 370 .byte 0xf3,0xc3 371 372 373.globl _aes128gcmsiv_aes_ks 374.private_extern _aes128gcmsiv_aes_ks 375 376.p2align 4 377_aes128gcmsiv_aes_ks: 378 379 vmovdqu (%rdi),%xmm1 380 vmovdqa %xmm1,(%rsi) 381 382 vmovdqa con1(%rip),%xmm0 383 vmovdqa mask(%rip),%xmm15 384 385 movq $8,%rax 386 387L$ks128_loop: 388 addq $16,%rsi 389 subq $1,%rax 390 vpshufb %xmm15,%xmm1,%xmm2 391 vaesenclast %xmm0,%xmm2,%xmm2 392 vpslld $1,%xmm0,%xmm0 393 vpslldq $4,%xmm1,%xmm3 394 vpxor %xmm3,%xmm1,%xmm1 395 vpslldq $4,%xmm3,%xmm3 396 vpxor %xmm3,%xmm1,%xmm1 397 vpslldq $4,%xmm3,%xmm3 398 vpxor %xmm3,%xmm1,%xmm1 399 vpxor %xmm2,%xmm1,%xmm1 400 vmovdqa %xmm1,(%rsi) 401 jne L$ks128_loop 402 403 vmovdqa con2(%rip),%xmm0 404 vpshufb %xmm15,%xmm1,%xmm2 405 vaesenclast %xmm0,%xmm2,%xmm2 406 vpslld $1,%xmm0,%xmm0 407 vpslldq $4,%xmm1,%xmm3 408 vpxor %xmm3,%xmm1,%xmm1 409 vpslldq $4,%xmm3,%xmm3 410 vpxor %xmm3,%xmm1,%xmm1 411 vpslldq $4,%xmm3,%xmm3 412 vpxor %xmm3,%xmm1,%xmm1 413 vpxor %xmm2,%xmm1,%xmm1 414 vmovdqa %xmm1,16(%rsi) 415 416 vpshufb %xmm15,%xmm1,%xmm2 417 vaesenclast %xmm0,%xmm2,%xmm2 418 vpslldq $4,%xmm1,%xmm3 419 vpxor %xmm3,%xmm1,%xmm1 420 vpslldq $4,%xmm3,%xmm3 421 vpxor %xmm3,%xmm1,%xmm1 422 vpslldq $4,%xmm3,%xmm3 423 vpxor %xmm3,%xmm1,%xmm1 424 vpxor %xmm2,%xmm1,%xmm1 425 vmovdqa %xmm1,32(%rsi) 426 .byte 0xf3,0xc3 427 428 429.globl _aes256gcmsiv_aes_ks 430.private_extern _aes256gcmsiv_aes_ks 431 432.p2align 4 433_aes256gcmsiv_aes_ks: 434 435 vmovdqu (%rdi),%xmm1 436 vmovdqu 16(%rdi),%xmm3 437 vmovdqa %xmm1,(%rsi) 438 vmovdqa %xmm3,16(%rsi) 439 vmovdqa con1(%rip),%xmm0 440 vmovdqa mask(%rip),%xmm15 441 vpxor %xmm14,%xmm14,%xmm14 442 movq $6,%rax 443 444L$ks256_loop: 445 addq $32,%rsi 446 subq $1,%rax 447 vpshufb %xmm15,%xmm3,%xmm2 448 vaesenclast %xmm0,%xmm2,%xmm2 449 vpslld $1,%xmm0,%xmm0 450 vpsllq $32,%xmm1,%xmm4 451 vpxor %xmm4,%xmm1,%xmm1 452 vpshufb con3(%rip),%xmm1,%xmm4 453 vpxor %xmm4,%xmm1,%xmm1 454 vpxor %xmm2,%xmm1,%xmm1 455 vmovdqa %xmm1,(%rsi) 456 vpshufd $0xff,%xmm1,%xmm2 457 vaesenclast %xmm14,%xmm2,%xmm2 458 vpsllq $32,%xmm3,%xmm4 459 vpxor %xmm4,%xmm3,%xmm3 460 vpshufb con3(%rip),%xmm3,%xmm4 461 vpxor %xmm4,%xmm3,%xmm3 462 vpxor %xmm2,%xmm3,%xmm3 463 vmovdqa %xmm3,16(%rsi) 464 jne L$ks256_loop 465 466 vpshufb %xmm15,%xmm3,%xmm2 467 vaesenclast %xmm0,%xmm2,%xmm2 468 vpsllq $32,%xmm1,%xmm4 469 vpxor %xmm4,%xmm1,%xmm1 470 vpshufb con3(%rip),%xmm1,%xmm4 471 vpxor %xmm4,%xmm1,%xmm1 472 vpxor %xmm2,%xmm1,%xmm1 473 vmovdqa %xmm1,32(%rsi) 474 .byte 0xf3,0xc3 475 476.globl _aes128gcmsiv_aes_ks_enc_x1 477.private_extern _aes128gcmsiv_aes_ks_enc_x1 478 479.p2align 4 480_aes128gcmsiv_aes_ks_enc_x1: 481 482 vmovdqa (%rcx),%xmm1 483 vmovdqa 0(%rdi),%xmm4 484 485 vmovdqa %xmm1,(%rdx) 486 vpxor %xmm1,%xmm4,%xmm4 487 488 vmovdqa con1(%rip),%xmm0 489 vmovdqa mask(%rip),%xmm15 490 491 vpshufb %xmm15,%xmm1,%xmm2 492 vaesenclast %xmm0,%xmm2,%xmm2 493 vpslld $1,%xmm0,%xmm0 494 vpsllq $32,%xmm1,%xmm3 495 vpxor %xmm3,%xmm1,%xmm1 496 vpshufb con3(%rip),%xmm1,%xmm3 497 vpxor %xmm3,%xmm1,%xmm1 498 vpxor %xmm2,%xmm1,%xmm1 499 500 vaesenc %xmm1,%xmm4,%xmm4 501 vmovdqa %xmm1,16(%rdx) 502 503 vpshufb %xmm15,%xmm1,%xmm2 504 vaesenclast %xmm0,%xmm2,%xmm2 505 vpslld $1,%xmm0,%xmm0 506 vpsllq $32,%xmm1,%xmm3 507 vpxor %xmm3,%xmm1,%xmm1 508 vpshufb con3(%rip),%xmm1,%xmm3 509 vpxor %xmm3,%xmm1,%xmm1 510 vpxor %xmm2,%xmm1,%xmm1 511 512 vaesenc %xmm1,%xmm4,%xmm4 513 vmovdqa %xmm1,32(%rdx) 514 515 vpshufb %xmm15,%xmm1,%xmm2 516 vaesenclast %xmm0,%xmm2,%xmm2 517 vpslld $1,%xmm0,%xmm0 518 vpsllq $32,%xmm1,%xmm3 519 vpxor %xmm3,%xmm1,%xmm1 520 vpshufb con3(%rip),%xmm1,%xmm3 521 vpxor %xmm3,%xmm1,%xmm1 522 vpxor %xmm2,%xmm1,%xmm1 523 524 vaesenc %xmm1,%xmm4,%xmm4 525 vmovdqa %xmm1,48(%rdx) 526 527 vpshufb %xmm15,%xmm1,%xmm2 528 vaesenclast %xmm0,%xmm2,%xmm2 529 vpslld $1,%xmm0,%xmm0 530 vpsllq $32,%xmm1,%xmm3 531 vpxor %xmm3,%xmm1,%xmm1 532 vpshufb con3(%rip),%xmm1,%xmm3 533 vpxor %xmm3,%xmm1,%xmm1 534 vpxor %xmm2,%xmm1,%xmm1 535 536 vaesenc %xmm1,%xmm4,%xmm4 537 vmovdqa %xmm1,64(%rdx) 538 539 vpshufb %xmm15,%xmm1,%xmm2 540 vaesenclast %xmm0,%xmm2,%xmm2 541 vpslld $1,%xmm0,%xmm0 542 vpsllq $32,%xmm1,%xmm3 543 vpxor %xmm3,%xmm1,%xmm1 544 vpshufb con3(%rip),%xmm1,%xmm3 545 vpxor %xmm3,%xmm1,%xmm1 546 vpxor %xmm2,%xmm1,%xmm1 547 548 vaesenc %xmm1,%xmm4,%xmm4 549 vmovdqa %xmm1,80(%rdx) 550 551 vpshufb %xmm15,%xmm1,%xmm2 552 vaesenclast %xmm0,%xmm2,%xmm2 553 vpslld $1,%xmm0,%xmm0 554 vpsllq $32,%xmm1,%xmm3 555 vpxor %xmm3,%xmm1,%xmm1 556 vpshufb con3(%rip),%xmm1,%xmm3 557 vpxor %xmm3,%xmm1,%xmm1 558 vpxor %xmm2,%xmm1,%xmm1 559 560 vaesenc %xmm1,%xmm4,%xmm4 561 vmovdqa %xmm1,96(%rdx) 562 563 vpshufb %xmm15,%xmm1,%xmm2 564 vaesenclast %xmm0,%xmm2,%xmm2 565 vpslld $1,%xmm0,%xmm0 566 vpsllq $32,%xmm1,%xmm3 567 vpxor %xmm3,%xmm1,%xmm1 568 vpshufb con3(%rip),%xmm1,%xmm3 569 vpxor %xmm3,%xmm1,%xmm1 570 vpxor %xmm2,%xmm1,%xmm1 571 572 vaesenc %xmm1,%xmm4,%xmm4 573 vmovdqa %xmm1,112(%rdx) 574 575 vpshufb %xmm15,%xmm1,%xmm2 576 vaesenclast %xmm0,%xmm2,%xmm2 577 vpslld $1,%xmm0,%xmm0 578 vpsllq $32,%xmm1,%xmm3 579 vpxor %xmm3,%xmm1,%xmm1 580 vpshufb con3(%rip),%xmm1,%xmm3 581 vpxor %xmm3,%xmm1,%xmm1 582 vpxor %xmm2,%xmm1,%xmm1 583 584 vaesenc %xmm1,%xmm4,%xmm4 585 vmovdqa %xmm1,128(%rdx) 586 587 588 vmovdqa con2(%rip),%xmm0 589 590 vpshufb %xmm15,%xmm1,%xmm2 591 vaesenclast %xmm0,%xmm2,%xmm2 592 vpslld $1,%xmm0,%xmm0 593 vpsllq $32,%xmm1,%xmm3 594 vpxor %xmm3,%xmm1,%xmm1 595 vpshufb con3(%rip),%xmm1,%xmm3 596 vpxor %xmm3,%xmm1,%xmm1 597 vpxor %xmm2,%xmm1,%xmm1 598 599 vaesenc %xmm1,%xmm4,%xmm4 600 vmovdqa %xmm1,144(%rdx) 601 602 vpshufb %xmm15,%xmm1,%xmm2 603 vaesenclast %xmm0,%xmm2,%xmm2 604 vpsllq $32,%xmm1,%xmm3 605 vpxor %xmm3,%xmm1,%xmm1 606 vpshufb con3(%rip),%xmm1,%xmm3 607 vpxor %xmm3,%xmm1,%xmm1 608 vpxor %xmm2,%xmm1,%xmm1 609 610 vaesenclast %xmm1,%xmm4,%xmm4 611 vmovdqa %xmm1,160(%rdx) 612 613 614 vmovdqa %xmm4,0(%rsi) 615 .byte 0xf3,0xc3 616 617 618.globl _aes128gcmsiv_kdf 619.private_extern _aes128gcmsiv_kdf 620 621.p2align 4 622_aes128gcmsiv_kdf: 623 624 625 626 627 628 vmovdqa (%rdx),%xmm1 629 vmovdqa 0(%rdi),%xmm9 630 vmovdqa and_mask(%rip),%xmm12 631 vmovdqa one(%rip),%xmm13 632 vpshufd $0x90,%xmm9,%xmm9 633 vpand %xmm12,%xmm9,%xmm9 634 vpaddd %xmm13,%xmm9,%xmm10 635 vpaddd %xmm13,%xmm10,%xmm11 636 vpaddd %xmm13,%xmm11,%xmm12 637 638 vpxor %xmm1,%xmm9,%xmm9 639 vpxor %xmm1,%xmm10,%xmm10 640 vpxor %xmm1,%xmm11,%xmm11 641 vpxor %xmm1,%xmm12,%xmm12 642 643 vmovdqa 16(%rdx),%xmm1 644 vaesenc %xmm1,%xmm9,%xmm9 645 vaesenc %xmm1,%xmm10,%xmm10 646 vaesenc %xmm1,%xmm11,%xmm11 647 vaesenc %xmm1,%xmm12,%xmm12 648 649 vmovdqa 32(%rdx),%xmm2 650 vaesenc %xmm2,%xmm9,%xmm9 651 vaesenc %xmm2,%xmm10,%xmm10 652 vaesenc %xmm2,%xmm11,%xmm11 653 vaesenc %xmm2,%xmm12,%xmm12 654 655 vmovdqa 48(%rdx),%xmm1 656 vaesenc %xmm1,%xmm9,%xmm9 657 vaesenc %xmm1,%xmm10,%xmm10 658 vaesenc %xmm1,%xmm11,%xmm11 659 vaesenc %xmm1,%xmm12,%xmm12 660 661 vmovdqa 64(%rdx),%xmm2 662 vaesenc %xmm2,%xmm9,%xmm9 663 vaesenc %xmm2,%xmm10,%xmm10 664 vaesenc %xmm2,%xmm11,%xmm11 665 vaesenc %xmm2,%xmm12,%xmm12 666 667 vmovdqa 80(%rdx),%xmm1 668 vaesenc %xmm1,%xmm9,%xmm9 669 vaesenc %xmm1,%xmm10,%xmm10 670 vaesenc %xmm1,%xmm11,%xmm11 671 vaesenc %xmm1,%xmm12,%xmm12 672 673 vmovdqa 96(%rdx),%xmm2 674 vaesenc %xmm2,%xmm9,%xmm9 675 vaesenc %xmm2,%xmm10,%xmm10 676 vaesenc %xmm2,%xmm11,%xmm11 677 vaesenc %xmm2,%xmm12,%xmm12 678 679 vmovdqa 112(%rdx),%xmm1 680 vaesenc %xmm1,%xmm9,%xmm9 681 vaesenc %xmm1,%xmm10,%xmm10 682 vaesenc %xmm1,%xmm11,%xmm11 683 vaesenc %xmm1,%xmm12,%xmm12 684 685 vmovdqa 128(%rdx),%xmm2 686 vaesenc %xmm2,%xmm9,%xmm9 687 vaesenc %xmm2,%xmm10,%xmm10 688 vaesenc %xmm2,%xmm11,%xmm11 689 vaesenc %xmm2,%xmm12,%xmm12 690 691 vmovdqa 144(%rdx),%xmm1 692 vaesenc %xmm1,%xmm9,%xmm9 693 vaesenc %xmm1,%xmm10,%xmm10 694 vaesenc %xmm1,%xmm11,%xmm11 695 vaesenc %xmm1,%xmm12,%xmm12 696 697 vmovdqa 160(%rdx),%xmm2 698 vaesenclast %xmm2,%xmm9,%xmm9 699 vaesenclast %xmm2,%xmm10,%xmm10 700 vaesenclast %xmm2,%xmm11,%xmm11 701 vaesenclast %xmm2,%xmm12,%xmm12 702 703 704 vmovdqa %xmm9,0(%rsi) 705 vmovdqa %xmm10,16(%rsi) 706 vmovdqa %xmm11,32(%rsi) 707 vmovdqa %xmm12,48(%rsi) 708 .byte 0xf3,0xc3 709 710 711.globl _aes128gcmsiv_enc_msg_x4 712.private_extern _aes128gcmsiv_enc_msg_x4 713 714.p2align 4 715_aes128gcmsiv_enc_msg_x4: 716 717 testq %r8,%r8 718 jnz L$128_enc_msg_x4_start 719 .byte 0xf3,0xc3 720 721L$128_enc_msg_x4_start: 722 pushq %r12 723 724 pushq %r13 725 726 727 shrq $4,%r8 728 movq %r8,%r10 729 shlq $62,%r10 730 shrq $62,%r10 731 732 733 vmovdqa (%rdx),%xmm15 734 vpor OR_MASK(%rip),%xmm15,%xmm15 735 736 vmovdqu four(%rip),%xmm4 737 vmovdqa %xmm15,%xmm0 738 vpaddd one(%rip),%xmm15,%xmm1 739 vpaddd two(%rip),%xmm15,%xmm2 740 vpaddd three(%rip),%xmm15,%xmm3 741 742 shrq $2,%r8 743 je L$128_enc_msg_x4_check_remainder 744 745 subq $64,%rsi 746 subq $64,%rdi 747 748L$128_enc_msg_x4_loop1: 749 addq $64,%rsi 750 addq $64,%rdi 751 752 vmovdqa %xmm0,%xmm5 753 vmovdqa %xmm1,%xmm6 754 vmovdqa %xmm2,%xmm7 755 vmovdqa %xmm3,%xmm8 756 757 vpxor (%rcx),%xmm5,%xmm5 758 vpxor (%rcx),%xmm6,%xmm6 759 vpxor (%rcx),%xmm7,%xmm7 760 vpxor (%rcx),%xmm8,%xmm8 761 762 vmovdqu 16(%rcx),%xmm12 763 vaesenc %xmm12,%xmm5,%xmm5 764 vaesenc %xmm12,%xmm6,%xmm6 765 vaesenc %xmm12,%xmm7,%xmm7 766 vaesenc %xmm12,%xmm8,%xmm8 767 768 vpaddd %xmm4,%xmm0,%xmm0 769 vmovdqu 32(%rcx),%xmm12 770 vaesenc %xmm12,%xmm5,%xmm5 771 vaesenc %xmm12,%xmm6,%xmm6 772 vaesenc %xmm12,%xmm7,%xmm7 773 vaesenc %xmm12,%xmm8,%xmm8 774 775 vpaddd %xmm4,%xmm1,%xmm1 776 vmovdqu 48(%rcx),%xmm12 777 vaesenc %xmm12,%xmm5,%xmm5 778 vaesenc %xmm12,%xmm6,%xmm6 779 vaesenc %xmm12,%xmm7,%xmm7 780 vaesenc %xmm12,%xmm8,%xmm8 781 782 vpaddd %xmm4,%xmm2,%xmm2 783 vmovdqu 64(%rcx),%xmm12 784 vaesenc %xmm12,%xmm5,%xmm5 785 vaesenc %xmm12,%xmm6,%xmm6 786 vaesenc %xmm12,%xmm7,%xmm7 787 vaesenc %xmm12,%xmm8,%xmm8 788 789 vpaddd %xmm4,%xmm3,%xmm3 790 791 vmovdqu 80(%rcx),%xmm12 792 vaesenc %xmm12,%xmm5,%xmm5 793 vaesenc %xmm12,%xmm6,%xmm6 794 vaesenc %xmm12,%xmm7,%xmm7 795 vaesenc %xmm12,%xmm8,%xmm8 796 797 vmovdqu 96(%rcx),%xmm12 798 vaesenc %xmm12,%xmm5,%xmm5 799 vaesenc %xmm12,%xmm6,%xmm6 800 vaesenc %xmm12,%xmm7,%xmm7 801 vaesenc %xmm12,%xmm8,%xmm8 802 803 vmovdqu 112(%rcx),%xmm12 804 vaesenc %xmm12,%xmm5,%xmm5 805 vaesenc %xmm12,%xmm6,%xmm6 806 vaesenc %xmm12,%xmm7,%xmm7 807 vaesenc %xmm12,%xmm8,%xmm8 808 809 vmovdqu 128(%rcx),%xmm12 810 vaesenc %xmm12,%xmm5,%xmm5 811 vaesenc %xmm12,%xmm6,%xmm6 812 vaesenc %xmm12,%xmm7,%xmm7 813 vaesenc %xmm12,%xmm8,%xmm8 814 815 vmovdqu 144(%rcx),%xmm12 816 vaesenc %xmm12,%xmm5,%xmm5 817 vaesenc %xmm12,%xmm6,%xmm6 818 vaesenc %xmm12,%xmm7,%xmm7 819 vaesenc %xmm12,%xmm8,%xmm8 820 821 vmovdqu 160(%rcx),%xmm12 822 vaesenclast %xmm12,%xmm5,%xmm5 823 vaesenclast %xmm12,%xmm6,%xmm6 824 vaesenclast %xmm12,%xmm7,%xmm7 825 vaesenclast %xmm12,%xmm8,%xmm8 826 827 828 829 vpxor 0(%rdi),%xmm5,%xmm5 830 vpxor 16(%rdi),%xmm6,%xmm6 831 vpxor 32(%rdi),%xmm7,%xmm7 832 vpxor 48(%rdi),%xmm8,%xmm8 833 834 subq $1,%r8 835 836 vmovdqu %xmm5,0(%rsi) 837 vmovdqu %xmm6,16(%rsi) 838 vmovdqu %xmm7,32(%rsi) 839 vmovdqu %xmm8,48(%rsi) 840 841 jne L$128_enc_msg_x4_loop1 842 843 addq $64,%rsi 844 addq $64,%rdi 845 846L$128_enc_msg_x4_check_remainder: 847 cmpq $0,%r10 848 je L$128_enc_msg_x4_out 849 850L$128_enc_msg_x4_loop2: 851 852 853 vmovdqa %xmm0,%xmm5 854 vpaddd one(%rip),%xmm0,%xmm0 855 856 vpxor (%rcx),%xmm5,%xmm5 857 vaesenc 16(%rcx),%xmm5,%xmm5 858 vaesenc 32(%rcx),%xmm5,%xmm5 859 vaesenc 48(%rcx),%xmm5,%xmm5 860 vaesenc 64(%rcx),%xmm5,%xmm5 861 vaesenc 80(%rcx),%xmm5,%xmm5 862 vaesenc 96(%rcx),%xmm5,%xmm5 863 vaesenc 112(%rcx),%xmm5,%xmm5 864 vaesenc 128(%rcx),%xmm5,%xmm5 865 vaesenc 144(%rcx),%xmm5,%xmm5 866 vaesenclast 160(%rcx),%xmm5,%xmm5 867 868 869 vpxor (%rdi),%xmm5,%xmm5 870 vmovdqu %xmm5,(%rsi) 871 872 addq $16,%rdi 873 addq $16,%rsi 874 875 subq $1,%r10 876 jne L$128_enc_msg_x4_loop2 877 878L$128_enc_msg_x4_out: 879 popq %r13 880 881 popq %r12 882 883 .byte 0xf3,0xc3 884 885 886.globl _aes128gcmsiv_enc_msg_x8 887.private_extern _aes128gcmsiv_enc_msg_x8 888 889.p2align 4 890_aes128gcmsiv_enc_msg_x8: 891 892 testq %r8,%r8 893 jnz L$128_enc_msg_x8_start 894 .byte 0xf3,0xc3 895 896L$128_enc_msg_x8_start: 897 pushq %r12 898 899 pushq %r13 900 901 pushq %rbp 902 903 movq %rsp,%rbp 904 905 906 907 subq $128,%rsp 908 andq $-64,%rsp 909 910 shrq $4,%r8 911 movq %r8,%r10 912 shlq $61,%r10 913 shrq $61,%r10 914 915 916 vmovdqu (%rdx),%xmm1 917 vpor OR_MASK(%rip),%xmm1,%xmm1 918 919 920 vpaddd seven(%rip),%xmm1,%xmm0 921 vmovdqu %xmm0,(%rsp) 922 vpaddd one(%rip),%xmm1,%xmm9 923 vpaddd two(%rip),%xmm1,%xmm10 924 vpaddd three(%rip),%xmm1,%xmm11 925 vpaddd four(%rip),%xmm1,%xmm12 926 vpaddd five(%rip),%xmm1,%xmm13 927 vpaddd six(%rip),%xmm1,%xmm14 928 vmovdqa %xmm1,%xmm0 929 930 shrq $3,%r8 931 je L$128_enc_msg_x8_check_remainder 932 933 subq $128,%rsi 934 subq $128,%rdi 935 936L$128_enc_msg_x8_loop1: 937 addq $128,%rsi 938 addq $128,%rdi 939 940 vmovdqa %xmm0,%xmm1 941 vmovdqa %xmm9,%xmm2 942 vmovdqa %xmm10,%xmm3 943 vmovdqa %xmm11,%xmm4 944 vmovdqa %xmm12,%xmm5 945 vmovdqa %xmm13,%xmm6 946 vmovdqa %xmm14,%xmm7 947 948 vmovdqu (%rsp),%xmm8 949 950 vpxor (%rcx),%xmm1,%xmm1 951 vpxor (%rcx),%xmm2,%xmm2 952 vpxor (%rcx),%xmm3,%xmm3 953 vpxor (%rcx),%xmm4,%xmm4 954 vpxor (%rcx),%xmm5,%xmm5 955 vpxor (%rcx),%xmm6,%xmm6 956 vpxor (%rcx),%xmm7,%xmm7 957 vpxor (%rcx),%xmm8,%xmm8 958 959 vmovdqu 16(%rcx),%xmm15 960 vaesenc %xmm15,%xmm1,%xmm1 961 vaesenc %xmm15,%xmm2,%xmm2 962 vaesenc %xmm15,%xmm3,%xmm3 963 vaesenc %xmm15,%xmm4,%xmm4 964 vaesenc %xmm15,%xmm5,%xmm5 965 vaesenc %xmm15,%xmm6,%xmm6 966 vaesenc %xmm15,%xmm7,%xmm7 967 vaesenc %xmm15,%xmm8,%xmm8 968 969 vmovdqu (%rsp),%xmm14 970 vpaddd eight(%rip),%xmm14,%xmm14 971 vmovdqu %xmm14,(%rsp) 972 vmovdqu 32(%rcx),%xmm15 973 vaesenc %xmm15,%xmm1,%xmm1 974 vaesenc %xmm15,%xmm2,%xmm2 975 vaesenc %xmm15,%xmm3,%xmm3 976 vaesenc %xmm15,%xmm4,%xmm4 977 vaesenc %xmm15,%xmm5,%xmm5 978 vaesenc %xmm15,%xmm6,%xmm6 979 vaesenc %xmm15,%xmm7,%xmm7 980 vaesenc %xmm15,%xmm8,%xmm8 981 982 vpsubd one(%rip),%xmm14,%xmm14 983 vmovdqu 48(%rcx),%xmm15 984 vaesenc %xmm15,%xmm1,%xmm1 985 vaesenc %xmm15,%xmm2,%xmm2 986 vaesenc %xmm15,%xmm3,%xmm3 987 vaesenc %xmm15,%xmm4,%xmm4 988 vaesenc %xmm15,%xmm5,%xmm5 989 vaesenc %xmm15,%xmm6,%xmm6 990 vaesenc %xmm15,%xmm7,%xmm7 991 vaesenc %xmm15,%xmm8,%xmm8 992 993 vpaddd eight(%rip),%xmm0,%xmm0 994 vmovdqu 64(%rcx),%xmm15 995 vaesenc %xmm15,%xmm1,%xmm1 996 vaesenc %xmm15,%xmm2,%xmm2 997 vaesenc %xmm15,%xmm3,%xmm3 998 vaesenc %xmm15,%xmm4,%xmm4 999 vaesenc %xmm15,%xmm5,%xmm5 1000 vaesenc %xmm15,%xmm6,%xmm6 1001 vaesenc %xmm15,%xmm7,%xmm7 1002 vaesenc %xmm15,%xmm8,%xmm8 1003 1004 vpaddd eight(%rip),%xmm9,%xmm9 1005 vmovdqu 80(%rcx),%xmm15 1006 vaesenc %xmm15,%xmm1,%xmm1 1007 vaesenc %xmm15,%xmm2,%xmm2 1008 vaesenc %xmm15,%xmm3,%xmm3 1009 vaesenc %xmm15,%xmm4,%xmm4 1010 vaesenc %xmm15,%xmm5,%xmm5 1011 vaesenc %xmm15,%xmm6,%xmm6 1012 vaesenc %xmm15,%xmm7,%xmm7 1013 vaesenc %xmm15,%xmm8,%xmm8 1014 1015 vpaddd eight(%rip),%xmm10,%xmm10 1016 vmovdqu 96(%rcx),%xmm15 1017 vaesenc %xmm15,%xmm1,%xmm1 1018 vaesenc %xmm15,%xmm2,%xmm2 1019 vaesenc %xmm15,%xmm3,%xmm3 1020 vaesenc %xmm15,%xmm4,%xmm4 1021 vaesenc %xmm15,%xmm5,%xmm5 1022 vaesenc %xmm15,%xmm6,%xmm6 1023 vaesenc %xmm15,%xmm7,%xmm7 1024 vaesenc %xmm15,%xmm8,%xmm8 1025 1026 vpaddd eight(%rip),%xmm11,%xmm11 1027 vmovdqu 112(%rcx),%xmm15 1028 vaesenc %xmm15,%xmm1,%xmm1 1029 vaesenc %xmm15,%xmm2,%xmm2 1030 vaesenc %xmm15,%xmm3,%xmm3 1031 vaesenc %xmm15,%xmm4,%xmm4 1032 vaesenc %xmm15,%xmm5,%xmm5 1033 vaesenc %xmm15,%xmm6,%xmm6 1034 vaesenc %xmm15,%xmm7,%xmm7 1035 vaesenc %xmm15,%xmm8,%xmm8 1036 1037 vpaddd eight(%rip),%xmm12,%xmm12 1038 vmovdqu 128(%rcx),%xmm15 1039 vaesenc %xmm15,%xmm1,%xmm1 1040 vaesenc %xmm15,%xmm2,%xmm2 1041 vaesenc %xmm15,%xmm3,%xmm3 1042 vaesenc %xmm15,%xmm4,%xmm4 1043 vaesenc %xmm15,%xmm5,%xmm5 1044 vaesenc %xmm15,%xmm6,%xmm6 1045 vaesenc %xmm15,%xmm7,%xmm7 1046 vaesenc %xmm15,%xmm8,%xmm8 1047 1048 vpaddd eight(%rip),%xmm13,%xmm13 1049 vmovdqu 144(%rcx),%xmm15 1050 vaesenc %xmm15,%xmm1,%xmm1 1051 vaesenc %xmm15,%xmm2,%xmm2 1052 vaesenc %xmm15,%xmm3,%xmm3 1053 vaesenc %xmm15,%xmm4,%xmm4 1054 vaesenc %xmm15,%xmm5,%xmm5 1055 vaesenc %xmm15,%xmm6,%xmm6 1056 vaesenc %xmm15,%xmm7,%xmm7 1057 vaesenc %xmm15,%xmm8,%xmm8 1058 1059 vmovdqu 160(%rcx),%xmm15 1060 vaesenclast %xmm15,%xmm1,%xmm1 1061 vaesenclast %xmm15,%xmm2,%xmm2 1062 vaesenclast %xmm15,%xmm3,%xmm3 1063 vaesenclast %xmm15,%xmm4,%xmm4 1064 vaesenclast %xmm15,%xmm5,%xmm5 1065 vaesenclast %xmm15,%xmm6,%xmm6 1066 vaesenclast %xmm15,%xmm7,%xmm7 1067 vaesenclast %xmm15,%xmm8,%xmm8 1068 1069 1070 1071 vpxor 0(%rdi),%xmm1,%xmm1 1072 vpxor 16(%rdi),%xmm2,%xmm2 1073 vpxor 32(%rdi),%xmm3,%xmm3 1074 vpxor 48(%rdi),%xmm4,%xmm4 1075 vpxor 64(%rdi),%xmm5,%xmm5 1076 vpxor 80(%rdi),%xmm6,%xmm6 1077 vpxor 96(%rdi),%xmm7,%xmm7 1078 vpxor 112(%rdi),%xmm8,%xmm8 1079 1080 decq %r8 1081 1082 vmovdqu %xmm1,0(%rsi) 1083 vmovdqu %xmm2,16(%rsi) 1084 vmovdqu %xmm3,32(%rsi) 1085 vmovdqu %xmm4,48(%rsi) 1086 vmovdqu %xmm5,64(%rsi) 1087 vmovdqu %xmm6,80(%rsi) 1088 vmovdqu %xmm7,96(%rsi) 1089 vmovdqu %xmm8,112(%rsi) 1090 1091 jne L$128_enc_msg_x8_loop1 1092 1093 addq $128,%rsi 1094 addq $128,%rdi 1095 1096L$128_enc_msg_x8_check_remainder: 1097 cmpq $0,%r10 1098 je L$128_enc_msg_x8_out 1099 1100L$128_enc_msg_x8_loop2: 1101 1102 1103 vmovdqa %xmm0,%xmm1 1104 vpaddd one(%rip),%xmm0,%xmm0 1105 1106 vpxor (%rcx),%xmm1,%xmm1 1107 vaesenc 16(%rcx),%xmm1,%xmm1 1108 vaesenc 32(%rcx),%xmm1,%xmm1 1109 vaesenc 48(%rcx),%xmm1,%xmm1 1110 vaesenc 64(%rcx),%xmm1,%xmm1 1111 vaesenc 80(%rcx),%xmm1,%xmm1 1112 vaesenc 96(%rcx),%xmm1,%xmm1 1113 vaesenc 112(%rcx),%xmm1,%xmm1 1114 vaesenc 128(%rcx),%xmm1,%xmm1 1115 vaesenc 144(%rcx),%xmm1,%xmm1 1116 vaesenclast 160(%rcx),%xmm1,%xmm1 1117 1118 1119 vpxor (%rdi),%xmm1,%xmm1 1120 1121 vmovdqu %xmm1,(%rsi) 1122 1123 addq $16,%rdi 1124 addq $16,%rsi 1125 1126 decq %r10 1127 jne L$128_enc_msg_x8_loop2 1128 1129L$128_enc_msg_x8_out: 1130 movq %rbp,%rsp 1131 1132 popq %rbp 1133 1134 popq %r13 1135 1136 popq %r12 1137 1138 .byte 0xf3,0xc3 1139 1140 1141.globl _aes128gcmsiv_dec 1142.private_extern _aes128gcmsiv_dec 1143 1144.p2align 4 1145_aes128gcmsiv_dec: 1146 1147 testq $~15,%r9 1148 jnz L$128_dec_start 1149 .byte 0xf3,0xc3 1150 1151L$128_dec_start: 1152 vzeroupper 1153 vmovdqa (%rdx),%xmm0 1154 movq %rdx,%rax 1155 1156 leaq 32(%rax),%rax 1157 leaq 32(%rcx),%rcx 1158 1159 1160 vmovdqu (%rdi,%r9,1),%xmm15 1161 vpor OR_MASK(%rip),%xmm15,%xmm15 1162 andq $~15,%r9 1163 1164 1165 cmpq $96,%r9 1166 jb L$128_dec_loop2 1167 1168 1169 subq $96,%r9 1170 vmovdqa %xmm15,%xmm7 1171 vpaddd one(%rip),%xmm7,%xmm8 1172 vpaddd two(%rip),%xmm7,%xmm9 1173 vpaddd one(%rip),%xmm9,%xmm10 1174 vpaddd two(%rip),%xmm9,%xmm11 1175 vpaddd one(%rip),%xmm11,%xmm12 1176 vpaddd two(%rip),%xmm11,%xmm15 1177 1178 vpxor (%r8),%xmm7,%xmm7 1179 vpxor (%r8),%xmm8,%xmm8 1180 vpxor (%r8),%xmm9,%xmm9 1181 vpxor (%r8),%xmm10,%xmm10 1182 vpxor (%r8),%xmm11,%xmm11 1183 vpxor (%r8),%xmm12,%xmm12 1184 1185 vmovdqu 16(%r8),%xmm4 1186 vaesenc %xmm4,%xmm7,%xmm7 1187 vaesenc %xmm4,%xmm8,%xmm8 1188 vaesenc %xmm4,%xmm9,%xmm9 1189 vaesenc %xmm4,%xmm10,%xmm10 1190 vaesenc %xmm4,%xmm11,%xmm11 1191 vaesenc %xmm4,%xmm12,%xmm12 1192 1193 vmovdqu 32(%r8),%xmm4 1194 vaesenc %xmm4,%xmm7,%xmm7 1195 vaesenc %xmm4,%xmm8,%xmm8 1196 vaesenc %xmm4,%xmm9,%xmm9 1197 vaesenc %xmm4,%xmm10,%xmm10 1198 vaesenc %xmm4,%xmm11,%xmm11 1199 vaesenc %xmm4,%xmm12,%xmm12 1200 1201 vmovdqu 48(%r8),%xmm4 1202 vaesenc %xmm4,%xmm7,%xmm7 1203 vaesenc %xmm4,%xmm8,%xmm8 1204 vaesenc %xmm4,%xmm9,%xmm9 1205 vaesenc %xmm4,%xmm10,%xmm10 1206 vaesenc %xmm4,%xmm11,%xmm11 1207 vaesenc %xmm4,%xmm12,%xmm12 1208 1209 vmovdqu 64(%r8),%xmm4 1210 vaesenc %xmm4,%xmm7,%xmm7 1211 vaesenc %xmm4,%xmm8,%xmm8 1212 vaesenc %xmm4,%xmm9,%xmm9 1213 vaesenc %xmm4,%xmm10,%xmm10 1214 vaesenc %xmm4,%xmm11,%xmm11 1215 vaesenc %xmm4,%xmm12,%xmm12 1216 1217 vmovdqu 80(%r8),%xmm4 1218 vaesenc %xmm4,%xmm7,%xmm7 1219 vaesenc %xmm4,%xmm8,%xmm8 1220 vaesenc %xmm4,%xmm9,%xmm9 1221 vaesenc %xmm4,%xmm10,%xmm10 1222 vaesenc %xmm4,%xmm11,%xmm11 1223 vaesenc %xmm4,%xmm12,%xmm12 1224 1225 vmovdqu 96(%r8),%xmm4 1226 vaesenc %xmm4,%xmm7,%xmm7 1227 vaesenc %xmm4,%xmm8,%xmm8 1228 vaesenc %xmm4,%xmm9,%xmm9 1229 vaesenc %xmm4,%xmm10,%xmm10 1230 vaesenc %xmm4,%xmm11,%xmm11 1231 vaesenc %xmm4,%xmm12,%xmm12 1232 1233 vmovdqu 112(%r8),%xmm4 1234 vaesenc %xmm4,%xmm7,%xmm7 1235 vaesenc %xmm4,%xmm8,%xmm8 1236 vaesenc %xmm4,%xmm9,%xmm9 1237 vaesenc %xmm4,%xmm10,%xmm10 1238 vaesenc %xmm4,%xmm11,%xmm11 1239 vaesenc %xmm4,%xmm12,%xmm12 1240 1241 vmovdqu 128(%r8),%xmm4 1242 vaesenc %xmm4,%xmm7,%xmm7 1243 vaesenc %xmm4,%xmm8,%xmm8 1244 vaesenc %xmm4,%xmm9,%xmm9 1245 vaesenc %xmm4,%xmm10,%xmm10 1246 vaesenc %xmm4,%xmm11,%xmm11 1247 vaesenc %xmm4,%xmm12,%xmm12 1248 1249 vmovdqu 144(%r8),%xmm4 1250 vaesenc %xmm4,%xmm7,%xmm7 1251 vaesenc %xmm4,%xmm8,%xmm8 1252 vaesenc %xmm4,%xmm9,%xmm9 1253 vaesenc %xmm4,%xmm10,%xmm10 1254 vaesenc %xmm4,%xmm11,%xmm11 1255 vaesenc %xmm4,%xmm12,%xmm12 1256 1257 vmovdqu 160(%r8),%xmm4 1258 vaesenclast %xmm4,%xmm7,%xmm7 1259 vaesenclast %xmm4,%xmm8,%xmm8 1260 vaesenclast %xmm4,%xmm9,%xmm9 1261 vaesenclast %xmm4,%xmm10,%xmm10 1262 vaesenclast %xmm4,%xmm11,%xmm11 1263 vaesenclast %xmm4,%xmm12,%xmm12 1264 1265 1266 vpxor 0(%rdi),%xmm7,%xmm7 1267 vpxor 16(%rdi),%xmm8,%xmm8 1268 vpxor 32(%rdi),%xmm9,%xmm9 1269 vpxor 48(%rdi),%xmm10,%xmm10 1270 vpxor 64(%rdi),%xmm11,%xmm11 1271 vpxor 80(%rdi),%xmm12,%xmm12 1272 1273 vmovdqu %xmm7,0(%rsi) 1274 vmovdqu %xmm8,16(%rsi) 1275 vmovdqu %xmm9,32(%rsi) 1276 vmovdqu %xmm10,48(%rsi) 1277 vmovdqu %xmm11,64(%rsi) 1278 vmovdqu %xmm12,80(%rsi) 1279 1280 addq $96,%rdi 1281 addq $96,%rsi 1282 jmp L$128_dec_loop1 1283 1284 1285.p2align 6 1286L$128_dec_loop1: 1287 cmpq $96,%r9 1288 jb L$128_dec_finish_96 1289 subq $96,%r9 1290 1291 vmovdqa %xmm12,%xmm6 1292 vmovdqa %xmm11,16-32(%rax) 1293 vmovdqa %xmm10,32-32(%rax) 1294 vmovdqa %xmm9,48-32(%rax) 1295 vmovdqa %xmm8,64-32(%rax) 1296 vmovdqa %xmm7,80-32(%rax) 1297 1298 vmovdqa %xmm15,%xmm7 1299 vpaddd one(%rip),%xmm7,%xmm8 1300 vpaddd two(%rip),%xmm7,%xmm9 1301 vpaddd one(%rip),%xmm9,%xmm10 1302 vpaddd two(%rip),%xmm9,%xmm11 1303 vpaddd one(%rip),%xmm11,%xmm12 1304 vpaddd two(%rip),%xmm11,%xmm15 1305 1306 vmovdqa (%r8),%xmm4 1307 vpxor %xmm4,%xmm7,%xmm7 1308 vpxor %xmm4,%xmm8,%xmm8 1309 vpxor %xmm4,%xmm9,%xmm9 1310 vpxor %xmm4,%xmm10,%xmm10 1311 vpxor %xmm4,%xmm11,%xmm11 1312 vpxor %xmm4,%xmm12,%xmm12 1313 1314 vmovdqu 0-32(%rcx),%xmm4 1315 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 1316 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 1317 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm1 1318 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm4 1319 vpxor %xmm4,%xmm1,%xmm1 1320 1321 vmovdqu 16(%r8),%xmm4 1322 vaesenc %xmm4,%xmm7,%xmm7 1323 vaesenc %xmm4,%xmm8,%xmm8 1324 vaesenc %xmm4,%xmm9,%xmm9 1325 vaesenc %xmm4,%xmm10,%xmm10 1326 vaesenc %xmm4,%xmm11,%xmm11 1327 vaesenc %xmm4,%xmm12,%xmm12 1328 1329 vmovdqu -16(%rax),%xmm6 1330 vmovdqu -16(%rcx),%xmm13 1331 1332 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1333 vpxor %xmm4,%xmm1,%xmm1 1334 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1335 vpxor %xmm4,%xmm2,%xmm2 1336 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1337 vpxor %xmm4,%xmm3,%xmm3 1338 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1339 vpxor %xmm4,%xmm1,%xmm1 1340 1341 1342 vmovdqu 32(%r8),%xmm4 1343 vaesenc %xmm4,%xmm7,%xmm7 1344 vaesenc %xmm4,%xmm8,%xmm8 1345 vaesenc %xmm4,%xmm9,%xmm9 1346 vaesenc %xmm4,%xmm10,%xmm10 1347 vaesenc %xmm4,%xmm11,%xmm11 1348 vaesenc %xmm4,%xmm12,%xmm12 1349 1350 vmovdqu 0(%rax),%xmm6 1351 vmovdqu 0(%rcx),%xmm13 1352 1353 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1354 vpxor %xmm4,%xmm1,%xmm1 1355 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1356 vpxor %xmm4,%xmm2,%xmm2 1357 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1358 vpxor %xmm4,%xmm3,%xmm3 1359 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1360 vpxor %xmm4,%xmm1,%xmm1 1361 1362 1363 vmovdqu 48(%r8),%xmm4 1364 vaesenc %xmm4,%xmm7,%xmm7 1365 vaesenc %xmm4,%xmm8,%xmm8 1366 vaesenc %xmm4,%xmm9,%xmm9 1367 vaesenc %xmm4,%xmm10,%xmm10 1368 vaesenc %xmm4,%xmm11,%xmm11 1369 vaesenc %xmm4,%xmm12,%xmm12 1370 1371 vmovdqu 16(%rax),%xmm6 1372 vmovdqu 16(%rcx),%xmm13 1373 1374 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1375 vpxor %xmm4,%xmm1,%xmm1 1376 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1377 vpxor %xmm4,%xmm2,%xmm2 1378 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1379 vpxor %xmm4,%xmm3,%xmm3 1380 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1381 vpxor %xmm4,%xmm1,%xmm1 1382 1383 1384 vmovdqu 64(%r8),%xmm4 1385 vaesenc %xmm4,%xmm7,%xmm7 1386 vaesenc %xmm4,%xmm8,%xmm8 1387 vaesenc %xmm4,%xmm9,%xmm9 1388 vaesenc %xmm4,%xmm10,%xmm10 1389 vaesenc %xmm4,%xmm11,%xmm11 1390 vaesenc %xmm4,%xmm12,%xmm12 1391 1392 vmovdqu 32(%rax),%xmm6 1393 vmovdqu 32(%rcx),%xmm13 1394 1395 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1396 vpxor %xmm4,%xmm1,%xmm1 1397 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1398 vpxor %xmm4,%xmm2,%xmm2 1399 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1400 vpxor %xmm4,%xmm3,%xmm3 1401 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1402 vpxor %xmm4,%xmm1,%xmm1 1403 1404 1405 vmovdqu 80(%r8),%xmm4 1406 vaesenc %xmm4,%xmm7,%xmm7 1407 vaesenc %xmm4,%xmm8,%xmm8 1408 vaesenc %xmm4,%xmm9,%xmm9 1409 vaesenc %xmm4,%xmm10,%xmm10 1410 vaesenc %xmm4,%xmm11,%xmm11 1411 vaesenc %xmm4,%xmm12,%xmm12 1412 1413 vmovdqu 96(%r8),%xmm4 1414 vaesenc %xmm4,%xmm7,%xmm7 1415 vaesenc %xmm4,%xmm8,%xmm8 1416 vaesenc %xmm4,%xmm9,%xmm9 1417 vaesenc %xmm4,%xmm10,%xmm10 1418 vaesenc %xmm4,%xmm11,%xmm11 1419 vaesenc %xmm4,%xmm12,%xmm12 1420 1421 vmovdqu 112(%r8),%xmm4 1422 vaesenc %xmm4,%xmm7,%xmm7 1423 vaesenc %xmm4,%xmm8,%xmm8 1424 vaesenc %xmm4,%xmm9,%xmm9 1425 vaesenc %xmm4,%xmm10,%xmm10 1426 vaesenc %xmm4,%xmm11,%xmm11 1427 vaesenc %xmm4,%xmm12,%xmm12 1428 1429 1430 vmovdqa 80-32(%rax),%xmm6 1431 vpxor %xmm0,%xmm6,%xmm6 1432 vmovdqu 80-32(%rcx),%xmm5 1433 1434 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 1435 vpxor %xmm4,%xmm1,%xmm1 1436 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 1437 vpxor %xmm4,%xmm2,%xmm2 1438 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 1439 vpxor %xmm4,%xmm3,%xmm3 1440 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 1441 vpxor %xmm4,%xmm1,%xmm1 1442 1443 vmovdqu 128(%r8),%xmm4 1444 vaesenc %xmm4,%xmm7,%xmm7 1445 vaesenc %xmm4,%xmm8,%xmm8 1446 vaesenc %xmm4,%xmm9,%xmm9 1447 vaesenc %xmm4,%xmm10,%xmm10 1448 vaesenc %xmm4,%xmm11,%xmm11 1449 vaesenc %xmm4,%xmm12,%xmm12 1450 1451 1452 vpsrldq $8,%xmm1,%xmm4 1453 vpxor %xmm4,%xmm2,%xmm5 1454 vpslldq $8,%xmm1,%xmm4 1455 vpxor %xmm4,%xmm3,%xmm0 1456 1457 vmovdqa poly(%rip),%xmm3 1458 1459 vmovdqu 144(%r8),%xmm4 1460 vaesenc %xmm4,%xmm7,%xmm7 1461 vaesenc %xmm4,%xmm8,%xmm8 1462 vaesenc %xmm4,%xmm9,%xmm9 1463 vaesenc %xmm4,%xmm10,%xmm10 1464 vaesenc %xmm4,%xmm11,%xmm11 1465 vaesenc %xmm4,%xmm12,%xmm12 1466 1467 vmovdqu 160(%r8),%xmm6 1468 vpalignr $8,%xmm0,%xmm0,%xmm2 1469 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1470 vpxor %xmm0,%xmm2,%xmm0 1471 1472 vpxor 0(%rdi),%xmm6,%xmm4 1473 vaesenclast %xmm4,%xmm7,%xmm7 1474 vpxor 16(%rdi),%xmm6,%xmm4 1475 vaesenclast %xmm4,%xmm8,%xmm8 1476 vpxor 32(%rdi),%xmm6,%xmm4 1477 vaesenclast %xmm4,%xmm9,%xmm9 1478 vpxor 48(%rdi),%xmm6,%xmm4 1479 vaesenclast %xmm4,%xmm10,%xmm10 1480 vpxor 64(%rdi),%xmm6,%xmm4 1481 vaesenclast %xmm4,%xmm11,%xmm11 1482 vpxor 80(%rdi),%xmm6,%xmm4 1483 vaesenclast %xmm4,%xmm12,%xmm12 1484 1485 vpalignr $8,%xmm0,%xmm0,%xmm2 1486 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1487 vpxor %xmm0,%xmm2,%xmm0 1488 1489 vmovdqu %xmm7,0(%rsi) 1490 vmovdqu %xmm8,16(%rsi) 1491 vmovdqu %xmm9,32(%rsi) 1492 vmovdqu %xmm10,48(%rsi) 1493 vmovdqu %xmm11,64(%rsi) 1494 vmovdqu %xmm12,80(%rsi) 1495 1496 vpxor %xmm5,%xmm0,%xmm0 1497 1498 leaq 96(%rdi),%rdi 1499 leaq 96(%rsi),%rsi 1500 jmp L$128_dec_loop1 1501 1502L$128_dec_finish_96: 1503 vmovdqa %xmm12,%xmm6 1504 vmovdqa %xmm11,16-32(%rax) 1505 vmovdqa %xmm10,32-32(%rax) 1506 vmovdqa %xmm9,48-32(%rax) 1507 vmovdqa %xmm8,64-32(%rax) 1508 vmovdqa %xmm7,80-32(%rax) 1509 1510 vmovdqu 0-32(%rcx),%xmm4 1511 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm1 1512 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 1513 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 1514 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm4 1515 vpxor %xmm4,%xmm1,%xmm1 1516 1517 vmovdqu -16(%rax),%xmm6 1518 vmovdqu -16(%rcx),%xmm13 1519 1520 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1521 vpxor %xmm4,%xmm1,%xmm1 1522 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1523 vpxor %xmm4,%xmm2,%xmm2 1524 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1525 vpxor %xmm4,%xmm3,%xmm3 1526 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1527 vpxor %xmm4,%xmm1,%xmm1 1528 1529 vmovdqu 0(%rax),%xmm6 1530 vmovdqu 0(%rcx),%xmm13 1531 1532 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1533 vpxor %xmm4,%xmm1,%xmm1 1534 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1535 vpxor %xmm4,%xmm2,%xmm2 1536 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1537 vpxor %xmm4,%xmm3,%xmm3 1538 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1539 vpxor %xmm4,%xmm1,%xmm1 1540 1541 vmovdqu 16(%rax),%xmm6 1542 vmovdqu 16(%rcx),%xmm13 1543 1544 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1545 vpxor %xmm4,%xmm1,%xmm1 1546 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1547 vpxor %xmm4,%xmm2,%xmm2 1548 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1549 vpxor %xmm4,%xmm3,%xmm3 1550 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1551 vpxor %xmm4,%xmm1,%xmm1 1552 1553 vmovdqu 32(%rax),%xmm6 1554 vmovdqu 32(%rcx),%xmm13 1555 1556 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1557 vpxor %xmm4,%xmm1,%xmm1 1558 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1559 vpxor %xmm4,%xmm2,%xmm2 1560 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1561 vpxor %xmm4,%xmm3,%xmm3 1562 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1563 vpxor %xmm4,%xmm1,%xmm1 1564 1565 1566 vmovdqu 80-32(%rax),%xmm6 1567 vpxor %xmm0,%xmm6,%xmm6 1568 vmovdqu 80-32(%rcx),%xmm5 1569 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 1570 vpxor %xmm4,%xmm2,%xmm2 1571 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 1572 vpxor %xmm4,%xmm3,%xmm3 1573 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 1574 vpxor %xmm4,%xmm1,%xmm1 1575 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 1576 vpxor %xmm4,%xmm1,%xmm1 1577 1578 vpsrldq $8,%xmm1,%xmm4 1579 vpxor %xmm4,%xmm2,%xmm5 1580 vpslldq $8,%xmm1,%xmm4 1581 vpxor %xmm4,%xmm3,%xmm0 1582 1583 vmovdqa poly(%rip),%xmm3 1584 1585 vpalignr $8,%xmm0,%xmm0,%xmm2 1586 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1587 vpxor %xmm0,%xmm2,%xmm0 1588 1589 vpalignr $8,%xmm0,%xmm0,%xmm2 1590 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1591 vpxor %xmm0,%xmm2,%xmm0 1592 1593 vpxor %xmm5,%xmm0,%xmm0 1594 1595L$128_dec_loop2: 1596 1597 1598 1599 cmpq $16,%r9 1600 jb L$128_dec_out 1601 subq $16,%r9 1602 1603 vmovdqa %xmm15,%xmm2 1604 vpaddd one(%rip),%xmm15,%xmm15 1605 1606 vpxor 0(%r8),%xmm2,%xmm2 1607 vaesenc 16(%r8),%xmm2,%xmm2 1608 vaesenc 32(%r8),%xmm2,%xmm2 1609 vaesenc 48(%r8),%xmm2,%xmm2 1610 vaesenc 64(%r8),%xmm2,%xmm2 1611 vaesenc 80(%r8),%xmm2,%xmm2 1612 vaesenc 96(%r8),%xmm2,%xmm2 1613 vaesenc 112(%r8),%xmm2,%xmm2 1614 vaesenc 128(%r8),%xmm2,%xmm2 1615 vaesenc 144(%r8),%xmm2,%xmm2 1616 vaesenclast 160(%r8),%xmm2,%xmm2 1617 vpxor (%rdi),%xmm2,%xmm2 1618 vmovdqu %xmm2,(%rsi) 1619 addq $16,%rdi 1620 addq $16,%rsi 1621 1622 vpxor %xmm2,%xmm0,%xmm0 1623 vmovdqa -32(%rcx),%xmm1 1624 call GFMUL 1625 1626 jmp L$128_dec_loop2 1627 1628L$128_dec_out: 1629 vmovdqu %xmm0,(%rdx) 1630 .byte 0xf3,0xc3 1631 1632 1633.globl _aes128gcmsiv_ecb_enc_block 1634.private_extern _aes128gcmsiv_ecb_enc_block 1635 1636.p2align 4 1637_aes128gcmsiv_ecb_enc_block: 1638 1639 vmovdqa (%rdi),%xmm1 1640 1641 vpxor (%rdx),%xmm1,%xmm1 1642 vaesenc 16(%rdx),%xmm1,%xmm1 1643 vaesenc 32(%rdx),%xmm1,%xmm1 1644 vaesenc 48(%rdx),%xmm1,%xmm1 1645 vaesenc 64(%rdx),%xmm1,%xmm1 1646 vaesenc 80(%rdx),%xmm1,%xmm1 1647 vaesenc 96(%rdx),%xmm1,%xmm1 1648 vaesenc 112(%rdx),%xmm1,%xmm1 1649 vaesenc 128(%rdx),%xmm1,%xmm1 1650 vaesenc 144(%rdx),%xmm1,%xmm1 1651 vaesenclast 160(%rdx),%xmm1,%xmm1 1652 1653 vmovdqa %xmm1,(%rsi) 1654 1655 .byte 0xf3,0xc3 1656 1657 1658.globl _aes256gcmsiv_aes_ks_enc_x1 1659.private_extern _aes256gcmsiv_aes_ks_enc_x1 1660 1661.p2align 4 1662_aes256gcmsiv_aes_ks_enc_x1: 1663 1664 vmovdqa con1(%rip),%xmm0 1665 vmovdqa mask(%rip),%xmm15 1666 vmovdqa (%rdi),%xmm8 1667 vmovdqa (%rcx),%xmm1 1668 vmovdqa 16(%rcx),%xmm3 1669 vpxor %xmm1,%xmm8,%xmm8 1670 vaesenc %xmm3,%xmm8,%xmm8 1671 vmovdqu %xmm1,(%rdx) 1672 vmovdqu %xmm3,16(%rdx) 1673 vpxor %xmm14,%xmm14,%xmm14 1674 1675 vpshufb %xmm15,%xmm3,%xmm2 1676 vaesenclast %xmm0,%xmm2,%xmm2 1677 vpslld $1,%xmm0,%xmm0 1678 vpslldq $4,%xmm1,%xmm4 1679 vpxor %xmm4,%xmm1,%xmm1 1680 vpslldq $4,%xmm4,%xmm4 1681 vpxor %xmm4,%xmm1,%xmm1 1682 vpslldq $4,%xmm4,%xmm4 1683 vpxor %xmm4,%xmm1,%xmm1 1684 vpxor %xmm2,%xmm1,%xmm1 1685 vaesenc %xmm1,%xmm8,%xmm8 1686 vmovdqu %xmm1,32(%rdx) 1687 1688 vpshufd $0xff,%xmm1,%xmm2 1689 vaesenclast %xmm14,%xmm2,%xmm2 1690 vpslldq $4,%xmm3,%xmm4 1691 vpxor %xmm4,%xmm3,%xmm3 1692 vpslldq $4,%xmm4,%xmm4 1693 vpxor %xmm4,%xmm3,%xmm3 1694 vpslldq $4,%xmm4,%xmm4 1695 vpxor %xmm4,%xmm3,%xmm3 1696 vpxor %xmm2,%xmm3,%xmm3 1697 vaesenc %xmm3,%xmm8,%xmm8 1698 vmovdqu %xmm3,48(%rdx) 1699 1700 vpshufb %xmm15,%xmm3,%xmm2 1701 vaesenclast %xmm0,%xmm2,%xmm2 1702 vpslld $1,%xmm0,%xmm0 1703 vpslldq $4,%xmm1,%xmm4 1704 vpxor %xmm4,%xmm1,%xmm1 1705 vpslldq $4,%xmm4,%xmm4 1706 vpxor %xmm4,%xmm1,%xmm1 1707 vpslldq $4,%xmm4,%xmm4 1708 vpxor %xmm4,%xmm1,%xmm1 1709 vpxor %xmm2,%xmm1,%xmm1 1710 vaesenc %xmm1,%xmm8,%xmm8 1711 vmovdqu %xmm1,64(%rdx) 1712 1713 vpshufd $0xff,%xmm1,%xmm2 1714 vaesenclast %xmm14,%xmm2,%xmm2 1715 vpslldq $4,%xmm3,%xmm4 1716 vpxor %xmm4,%xmm3,%xmm3 1717 vpslldq $4,%xmm4,%xmm4 1718 vpxor %xmm4,%xmm3,%xmm3 1719 vpslldq $4,%xmm4,%xmm4 1720 vpxor %xmm4,%xmm3,%xmm3 1721 vpxor %xmm2,%xmm3,%xmm3 1722 vaesenc %xmm3,%xmm8,%xmm8 1723 vmovdqu %xmm3,80(%rdx) 1724 1725 vpshufb %xmm15,%xmm3,%xmm2 1726 vaesenclast %xmm0,%xmm2,%xmm2 1727 vpslld $1,%xmm0,%xmm0 1728 vpslldq $4,%xmm1,%xmm4 1729 vpxor %xmm4,%xmm1,%xmm1 1730 vpslldq $4,%xmm4,%xmm4 1731 vpxor %xmm4,%xmm1,%xmm1 1732 vpslldq $4,%xmm4,%xmm4 1733 vpxor %xmm4,%xmm1,%xmm1 1734 vpxor %xmm2,%xmm1,%xmm1 1735 vaesenc %xmm1,%xmm8,%xmm8 1736 vmovdqu %xmm1,96(%rdx) 1737 1738 vpshufd $0xff,%xmm1,%xmm2 1739 vaesenclast %xmm14,%xmm2,%xmm2 1740 vpslldq $4,%xmm3,%xmm4 1741 vpxor %xmm4,%xmm3,%xmm3 1742 vpslldq $4,%xmm4,%xmm4 1743 vpxor %xmm4,%xmm3,%xmm3 1744 vpslldq $4,%xmm4,%xmm4 1745 vpxor %xmm4,%xmm3,%xmm3 1746 vpxor %xmm2,%xmm3,%xmm3 1747 vaesenc %xmm3,%xmm8,%xmm8 1748 vmovdqu %xmm3,112(%rdx) 1749 1750 vpshufb %xmm15,%xmm3,%xmm2 1751 vaesenclast %xmm0,%xmm2,%xmm2 1752 vpslld $1,%xmm0,%xmm0 1753 vpslldq $4,%xmm1,%xmm4 1754 vpxor %xmm4,%xmm1,%xmm1 1755 vpslldq $4,%xmm4,%xmm4 1756 vpxor %xmm4,%xmm1,%xmm1 1757 vpslldq $4,%xmm4,%xmm4 1758 vpxor %xmm4,%xmm1,%xmm1 1759 vpxor %xmm2,%xmm1,%xmm1 1760 vaesenc %xmm1,%xmm8,%xmm8 1761 vmovdqu %xmm1,128(%rdx) 1762 1763 vpshufd $0xff,%xmm1,%xmm2 1764 vaesenclast %xmm14,%xmm2,%xmm2 1765 vpslldq $4,%xmm3,%xmm4 1766 vpxor %xmm4,%xmm3,%xmm3 1767 vpslldq $4,%xmm4,%xmm4 1768 vpxor %xmm4,%xmm3,%xmm3 1769 vpslldq $4,%xmm4,%xmm4 1770 vpxor %xmm4,%xmm3,%xmm3 1771 vpxor %xmm2,%xmm3,%xmm3 1772 vaesenc %xmm3,%xmm8,%xmm8 1773 vmovdqu %xmm3,144(%rdx) 1774 1775 vpshufb %xmm15,%xmm3,%xmm2 1776 vaesenclast %xmm0,%xmm2,%xmm2 1777 vpslld $1,%xmm0,%xmm0 1778 vpslldq $4,%xmm1,%xmm4 1779 vpxor %xmm4,%xmm1,%xmm1 1780 vpslldq $4,%xmm4,%xmm4 1781 vpxor %xmm4,%xmm1,%xmm1 1782 vpslldq $4,%xmm4,%xmm4 1783 vpxor %xmm4,%xmm1,%xmm1 1784 vpxor %xmm2,%xmm1,%xmm1 1785 vaesenc %xmm1,%xmm8,%xmm8 1786 vmovdqu %xmm1,160(%rdx) 1787 1788 vpshufd $0xff,%xmm1,%xmm2 1789 vaesenclast %xmm14,%xmm2,%xmm2 1790 vpslldq $4,%xmm3,%xmm4 1791 vpxor %xmm4,%xmm3,%xmm3 1792 vpslldq $4,%xmm4,%xmm4 1793 vpxor %xmm4,%xmm3,%xmm3 1794 vpslldq $4,%xmm4,%xmm4 1795 vpxor %xmm4,%xmm3,%xmm3 1796 vpxor %xmm2,%xmm3,%xmm3 1797 vaesenc %xmm3,%xmm8,%xmm8 1798 vmovdqu %xmm3,176(%rdx) 1799 1800 vpshufb %xmm15,%xmm3,%xmm2 1801 vaesenclast %xmm0,%xmm2,%xmm2 1802 vpslld $1,%xmm0,%xmm0 1803 vpslldq $4,%xmm1,%xmm4 1804 vpxor %xmm4,%xmm1,%xmm1 1805 vpslldq $4,%xmm4,%xmm4 1806 vpxor %xmm4,%xmm1,%xmm1 1807 vpslldq $4,%xmm4,%xmm4 1808 vpxor %xmm4,%xmm1,%xmm1 1809 vpxor %xmm2,%xmm1,%xmm1 1810 vaesenc %xmm1,%xmm8,%xmm8 1811 vmovdqu %xmm1,192(%rdx) 1812 1813 vpshufd $0xff,%xmm1,%xmm2 1814 vaesenclast %xmm14,%xmm2,%xmm2 1815 vpslldq $4,%xmm3,%xmm4 1816 vpxor %xmm4,%xmm3,%xmm3 1817 vpslldq $4,%xmm4,%xmm4 1818 vpxor %xmm4,%xmm3,%xmm3 1819 vpslldq $4,%xmm4,%xmm4 1820 vpxor %xmm4,%xmm3,%xmm3 1821 vpxor %xmm2,%xmm3,%xmm3 1822 vaesenc %xmm3,%xmm8,%xmm8 1823 vmovdqu %xmm3,208(%rdx) 1824 1825 vpshufb %xmm15,%xmm3,%xmm2 1826 vaesenclast %xmm0,%xmm2,%xmm2 1827 vpslldq $4,%xmm1,%xmm4 1828 vpxor %xmm4,%xmm1,%xmm1 1829 vpslldq $4,%xmm4,%xmm4 1830 vpxor %xmm4,%xmm1,%xmm1 1831 vpslldq $4,%xmm4,%xmm4 1832 vpxor %xmm4,%xmm1,%xmm1 1833 vpxor %xmm2,%xmm1,%xmm1 1834 vaesenclast %xmm1,%xmm8,%xmm8 1835 vmovdqu %xmm1,224(%rdx) 1836 1837 vmovdqa %xmm8,(%rsi) 1838 .byte 0xf3,0xc3 1839 1840 1841.globl _aes256gcmsiv_ecb_enc_block 1842.private_extern _aes256gcmsiv_ecb_enc_block 1843 1844.p2align 4 1845_aes256gcmsiv_ecb_enc_block: 1846 1847 vmovdqa (%rdi),%xmm1 1848 vpxor (%rdx),%xmm1,%xmm1 1849 vaesenc 16(%rdx),%xmm1,%xmm1 1850 vaesenc 32(%rdx),%xmm1,%xmm1 1851 vaesenc 48(%rdx),%xmm1,%xmm1 1852 vaesenc 64(%rdx),%xmm1,%xmm1 1853 vaesenc 80(%rdx),%xmm1,%xmm1 1854 vaesenc 96(%rdx),%xmm1,%xmm1 1855 vaesenc 112(%rdx),%xmm1,%xmm1 1856 vaesenc 128(%rdx),%xmm1,%xmm1 1857 vaesenc 144(%rdx),%xmm1,%xmm1 1858 vaesenc 160(%rdx),%xmm1,%xmm1 1859 vaesenc 176(%rdx),%xmm1,%xmm1 1860 vaesenc 192(%rdx),%xmm1,%xmm1 1861 vaesenc 208(%rdx),%xmm1,%xmm1 1862 vaesenclast 224(%rdx),%xmm1,%xmm1 1863 vmovdqa %xmm1,(%rsi) 1864 .byte 0xf3,0xc3 1865 1866 1867.globl _aes256gcmsiv_enc_msg_x4 1868.private_extern _aes256gcmsiv_enc_msg_x4 1869 1870.p2align 4 1871_aes256gcmsiv_enc_msg_x4: 1872 1873 testq %r8,%r8 1874 jnz L$256_enc_msg_x4_start 1875 .byte 0xf3,0xc3 1876 1877L$256_enc_msg_x4_start: 1878 movq %r8,%r10 1879 shrq $4,%r8 1880 shlq $60,%r10 1881 jz L$256_enc_msg_x4_start2 1882 addq $1,%r8 1883 1884L$256_enc_msg_x4_start2: 1885 movq %r8,%r10 1886 shlq $62,%r10 1887 shrq $62,%r10 1888 1889 1890 vmovdqa (%rdx),%xmm15 1891 vpor OR_MASK(%rip),%xmm15,%xmm15 1892 1893 vmovdqa four(%rip),%xmm4 1894 vmovdqa %xmm15,%xmm0 1895 vpaddd one(%rip),%xmm15,%xmm1 1896 vpaddd two(%rip),%xmm15,%xmm2 1897 vpaddd three(%rip),%xmm15,%xmm3 1898 1899 shrq $2,%r8 1900 je L$256_enc_msg_x4_check_remainder 1901 1902 subq $64,%rsi 1903 subq $64,%rdi 1904 1905L$256_enc_msg_x4_loop1: 1906 addq $64,%rsi 1907 addq $64,%rdi 1908 1909 vmovdqa %xmm0,%xmm5 1910 vmovdqa %xmm1,%xmm6 1911 vmovdqa %xmm2,%xmm7 1912 vmovdqa %xmm3,%xmm8 1913 1914 vpxor (%rcx),%xmm5,%xmm5 1915 vpxor (%rcx),%xmm6,%xmm6 1916 vpxor (%rcx),%xmm7,%xmm7 1917 vpxor (%rcx),%xmm8,%xmm8 1918 1919 vmovdqu 16(%rcx),%xmm12 1920 vaesenc %xmm12,%xmm5,%xmm5 1921 vaesenc %xmm12,%xmm6,%xmm6 1922 vaesenc %xmm12,%xmm7,%xmm7 1923 vaesenc %xmm12,%xmm8,%xmm8 1924 1925 vpaddd %xmm4,%xmm0,%xmm0 1926 vmovdqu 32(%rcx),%xmm12 1927 vaesenc %xmm12,%xmm5,%xmm5 1928 vaesenc %xmm12,%xmm6,%xmm6 1929 vaesenc %xmm12,%xmm7,%xmm7 1930 vaesenc %xmm12,%xmm8,%xmm8 1931 1932 vpaddd %xmm4,%xmm1,%xmm1 1933 vmovdqu 48(%rcx),%xmm12 1934 vaesenc %xmm12,%xmm5,%xmm5 1935 vaesenc %xmm12,%xmm6,%xmm6 1936 vaesenc %xmm12,%xmm7,%xmm7 1937 vaesenc %xmm12,%xmm8,%xmm8 1938 1939 vpaddd %xmm4,%xmm2,%xmm2 1940 vmovdqu 64(%rcx),%xmm12 1941 vaesenc %xmm12,%xmm5,%xmm5 1942 vaesenc %xmm12,%xmm6,%xmm6 1943 vaesenc %xmm12,%xmm7,%xmm7 1944 vaesenc %xmm12,%xmm8,%xmm8 1945 1946 vpaddd %xmm4,%xmm3,%xmm3 1947 1948 vmovdqu 80(%rcx),%xmm12 1949 vaesenc %xmm12,%xmm5,%xmm5 1950 vaesenc %xmm12,%xmm6,%xmm6 1951 vaesenc %xmm12,%xmm7,%xmm7 1952 vaesenc %xmm12,%xmm8,%xmm8 1953 1954 vmovdqu 96(%rcx),%xmm12 1955 vaesenc %xmm12,%xmm5,%xmm5 1956 vaesenc %xmm12,%xmm6,%xmm6 1957 vaesenc %xmm12,%xmm7,%xmm7 1958 vaesenc %xmm12,%xmm8,%xmm8 1959 1960 vmovdqu 112(%rcx),%xmm12 1961 vaesenc %xmm12,%xmm5,%xmm5 1962 vaesenc %xmm12,%xmm6,%xmm6 1963 vaesenc %xmm12,%xmm7,%xmm7 1964 vaesenc %xmm12,%xmm8,%xmm8 1965 1966 vmovdqu 128(%rcx),%xmm12 1967 vaesenc %xmm12,%xmm5,%xmm5 1968 vaesenc %xmm12,%xmm6,%xmm6 1969 vaesenc %xmm12,%xmm7,%xmm7 1970 vaesenc %xmm12,%xmm8,%xmm8 1971 1972 vmovdqu 144(%rcx),%xmm12 1973 vaesenc %xmm12,%xmm5,%xmm5 1974 vaesenc %xmm12,%xmm6,%xmm6 1975 vaesenc %xmm12,%xmm7,%xmm7 1976 vaesenc %xmm12,%xmm8,%xmm8 1977 1978 vmovdqu 160(%rcx),%xmm12 1979 vaesenc %xmm12,%xmm5,%xmm5 1980 vaesenc %xmm12,%xmm6,%xmm6 1981 vaesenc %xmm12,%xmm7,%xmm7 1982 vaesenc %xmm12,%xmm8,%xmm8 1983 1984 vmovdqu 176(%rcx),%xmm12 1985 vaesenc %xmm12,%xmm5,%xmm5 1986 vaesenc %xmm12,%xmm6,%xmm6 1987 vaesenc %xmm12,%xmm7,%xmm7 1988 vaesenc %xmm12,%xmm8,%xmm8 1989 1990 vmovdqu 192(%rcx),%xmm12 1991 vaesenc %xmm12,%xmm5,%xmm5 1992 vaesenc %xmm12,%xmm6,%xmm6 1993 vaesenc %xmm12,%xmm7,%xmm7 1994 vaesenc %xmm12,%xmm8,%xmm8 1995 1996 vmovdqu 208(%rcx),%xmm12 1997 vaesenc %xmm12,%xmm5,%xmm5 1998 vaesenc %xmm12,%xmm6,%xmm6 1999 vaesenc %xmm12,%xmm7,%xmm7 2000 vaesenc %xmm12,%xmm8,%xmm8 2001 2002 vmovdqu 224(%rcx),%xmm12 2003 vaesenclast %xmm12,%xmm5,%xmm5 2004 vaesenclast %xmm12,%xmm6,%xmm6 2005 vaesenclast %xmm12,%xmm7,%xmm7 2006 vaesenclast %xmm12,%xmm8,%xmm8 2007 2008 2009 2010 vpxor 0(%rdi),%xmm5,%xmm5 2011 vpxor 16(%rdi),%xmm6,%xmm6 2012 vpxor 32(%rdi),%xmm7,%xmm7 2013 vpxor 48(%rdi),%xmm8,%xmm8 2014 2015 subq $1,%r8 2016 2017 vmovdqu %xmm5,0(%rsi) 2018 vmovdqu %xmm6,16(%rsi) 2019 vmovdqu %xmm7,32(%rsi) 2020 vmovdqu %xmm8,48(%rsi) 2021 2022 jne L$256_enc_msg_x4_loop1 2023 2024 addq $64,%rsi 2025 addq $64,%rdi 2026 2027L$256_enc_msg_x4_check_remainder: 2028 cmpq $0,%r10 2029 je L$256_enc_msg_x4_out 2030 2031L$256_enc_msg_x4_loop2: 2032 2033 2034 2035 vmovdqa %xmm0,%xmm5 2036 vpaddd one(%rip),%xmm0,%xmm0 2037 vpxor (%rcx),%xmm5,%xmm5 2038 vaesenc 16(%rcx),%xmm5,%xmm5 2039 vaesenc 32(%rcx),%xmm5,%xmm5 2040 vaesenc 48(%rcx),%xmm5,%xmm5 2041 vaesenc 64(%rcx),%xmm5,%xmm5 2042 vaesenc 80(%rcx),%xmm5,%xmm5 2043 vaesenc 96(%rcx),%xmm5,%xmm5 2044 vaesenc 112(%rcx),%xmm5,%xmm5 2045 vaesenc 128(%rcx),%xmm5,%xmm5 2046 vaesenc 144(%rcx),%xmm5,%xmm5 2047 vaesenc 160(%rcx),%xmm5,%xmm5 2048 vaesenc 176(%rcx),%xmm5,%xmm5 2049 vaesenc 192(%rcx),%xmm5,%xmm5 2050 vaesenc 208(%rcx),%xmm5,%xmm5 2051 vaesenclast 224(%rcx),%xmm5,%xmm5 2052 2053 2054 vpxor (%rdi),%xmm5,%xmm5 2055 2056 vmovdqu %xmm5,(%rsi) 2057 2058 addq $16,%rdi 2059 addq $16,%rsi 2060 2061 subq $1,%r10 2062 jne L$256_enc_msg_x4_loop2 2063 2064L$256_enc_msg_x4_out: 2065 .byte 0xf3,0xc3 2066 2067 2068.globl _aes256gcmsiv_enc_msg_x8 2069.private_extern _aes256gcmsiv_enc_msg_x8 2070 2071.p2align 4 2072_aes256gcmsiv_enc_msg_x8: 2073 2074 testq %r8,%r8 2075 jnz L$256_enc_msg_x8_start 2076 .byte 0xf3,0xc3 2077 2078L$256_enc_msg_x8_start: 2079 2080 movq %rsp,%r11 2081 subq $16,%r11 2082 andq $-64,%r11 2083 2084 movq %r8,%r10 2085 shrq $4,%r8 2086 shlq $60,%r10 2087 jz L$256_enc_msg_x8_start2 2088 addq $1,%r8 2089 2090L$256_enc_msg_x8_start2: 2091 movq %r8,%r10 2092 shlq $61,%r10 2093 shrq $61,%r10 2094 2095 2096 vmovdqa (%rdx),%xmm1 2097 vpor OR_MASK(%rip),%xmm1,%xmm1 2098 2099 2100 vpaddd seven(%rip),%xmm1,%xmm0 2101 vmovdqa %xmm0,(%r11) 2102 vpaddd one(%rip),%xmm1,%xmm9 2103 vpaddd two(%rip),%xmm1,%xmm10 2104 vpaddd three(%rip),%xmm1,%xmm11 2105 vpaddd four(%rip),%xmm1,%xmm12 2106 vpaddd five(%rip),%xmm1,%xmm13 2107 vpaddd six(%rip),%xmm1,%xmm14 2108 vmovdqa %xmm1,%xmm0 2109 2110 shrq $3,%r8 2111 jz L$256_enc_msg_x8_check_remainder 2112 2113 subq $128,%rsi 2114 subq $128,%rdi 2115 2116L$256_enc_msg_x8_loop1: 2117 addq $128,%rsi 2118 addq $128,%rdi 2119 2120 vmovdqa %xmm0,%xmm1 2121 vmovdqa %xmm9,%xmm2 2122 vmovdqa %xmm10,%xmm3 2123 vmovdqa %xmm11,%xmm4 2124 vmovdqa %xmm12,%xmm5 2125 vmovdqa %xmm13,%xmm6 2126 vmovdqa %xmm14,%xmm7 2127 2128 vmovdqa (%r11),%xmm8 2129 2130 vpxor (%rcx),%xmm1,%xmm1 2131 vpxor (%rcx),%xmm2,%xmm2 2132 vpxor (%rcx),%xmm3,%xmm3 2133 vpxor (%rcx),%xmm4,%xmm4 2134 vpxor (%rcx),%xmm5,%xmm5 2135 vpxor (%rcx),%xmm6,%xmm6 2136 vpxor (%rcx),%xmm7,%xmm7 2137 vpxor (%rcx),%xmm8,%xmm8 2138 2139 vmovdqu 16(%rcx),%xmm15 2140 vaesenc %xmm15,%xmm1,%xmm1 2141 vaesenc %xmm15,%xmm2,%xmm2 2142 vaesenc %xmm15,%xmm3,%xmm3 2143 vaesenc %xmm15,%xmm4,%xmm4 2144 vaesenc %xmm15,%xmm5,%xmm5 2145 vaesenc %xmm15,%xmm6,%xmm6 2146 vaesenc %xmm15,%xmm7,%xmm7 2147 vaesenc %xmm15,%xmm8,%xmm8 2148 2149 vmovdqa (%r11),%xmm14 2150 vpaddd eight(%rip),%xmm14,%xmm14 2151 vmovdqa %xmm14,(%r11) 2152 vmovdqu 32(%rcx),%xmm15 2153 vaesenc %xmm15,%xmm1,%xmm1 2154 vaesenc %xmm15,%xmm2,%xmm2 2155 vaesenc %xmm15,%xmm3,%xmm3 2156 vaesenc %xmm15,%xmm4,%xmm4 2157 vaesenc %xmm15,%xmm5,%xmm5 2158 vaesenc %xmm15,%xmm6,%xmm6 2159 vaesenc %xmm15,%xmm7,%xmm7 2160 vaesenc %xmm15,%xmm8,%xmm8 2161 2162 vpsubd one(%rip),%xmm14,%xmm14 2163 vmovdqu 48(%rcx),%xmm15 2164 vaesenc %xmm15,%xmm1,%xmm1 2165 vaesenc %xmm15,%xmm2,%xmm2 2166 vaesenc %xmm15,%xmm3,%xmm3 2167 vaesenc %xmm15,%xmm4,%xmm4 2168 vaesenc %xmm15,%xmm5,%xmm5 2169 vaesenc %xmm15,%xmm6,%xmm6 2170 vaesenc %xmm15,%xmm7,%xmm7 2171 vaesenc %xmm15,%xmm8,%xmm8 2172 2173 vpaddd eight(%rip),%xmm0,%xmm0 2174 vmovdqu 64(%rcx),%xmm15 2175 vaesenc %xmm15,%xmm1,%xmm1 2176 vaesenc %xmm15,%xmm2,%xmm2 2177 vaesenc %xmm15,%xmm3,%xmm3 2178 vaesenc %xmm15,%xmm4,%xmm4 2179 vaesenc %xmm15,%xmm5,%xmm5 2180 vaesenc %xmm15,%xmm6,%xmm6 2181 vaesenc %xmm15,%xmm7,%xmm7 2182 vaesenc %xmm15,%xmm8,%xmm8 2183 2184 vpaddd eight(%rip),%xmm9,%xmm9 2185 vmovdqu 80(%rcx),%xmm15 2186 vaesenc %xmm15,%xmm1,%xmm1 2187 vaesenc %xmm15,%xmm2,%xmm2 2188 vaesenc %xmm15,%xmm3,%xmm3 2189 vaesenc %xmm15,%xmm4,%xmm4 2190 vaesenc %xmm15,%xmm5,%xmm5 2191 vaesenc %xmm15,%xmm6,%xmm6 2192 vaesenc %xmm15,%xmm7,%xmm7 2193 vaesenc %xmm15,%xmm8,%xmm8 2194 2195 vpaddd eight(%rip),%xmm10,%xmm10 2196 vmovdqu 96(%rcx),%xmm15 2197 vaesenc %xmm15,%xmm1,%xmm1 2198 vaesenc %xmm15,%xmm2,%xmm2 2199 vaesenc %xmm15,%xmm3,%xmm3 2200 vaesenc %xmm15,%xmm4,%xmm4 2201 vaesenc %xmm15,%xmm5,%xmm5 2202 vaesenc %xmm15,%xmm6,%xmm6 2203 vaesenc %xmm15,%xmm7,%xmm7 2204 vaesenc %xmm15,%xmm8,%xmm8 2205 2206 vpaddd eight(%rip),%xmm11,%xmm11 2207 vmovdqu 112(%rcx),%xmm15 2208 vaesenc %xmm15,%xmm1,%xmm1 2209 vaesenc %xmm15,%xmm2,%xmm2 2210 vaesenc %xmm15,%xmm3,%xmm3 2211 vaesenc %xmm15,%xmm4,%xmm4 2212 vaesenc %xmm15,%xmm5,%xmm5 2213 vaesenc %xmm15,%xmm6,%xmm6 2214 vaesenc %xmm15,%xmm7,%xmm7 2215 vaesenc %xmm15,%xmm8,%xmm8 2216 2217 vpaddd eight(%rip),%xmm12,%xmm12 2218 vmovdqu 128(%rcx),%xmm15 2219 vaesenc %xmm15,%xmm1,%xmm1 2220 vaesenc %xmm15,%xmm2,%xmm2 2221 vaesenc %xmm15,%xmm3,%xmm3 2222 vaesenc %xmm15,%xmm4,%xmm4 2223 vaesenc %xmm15,%xmm5,%xmm5 2224 vaesenc %xmm15,%xmm6,%xmm6 2225 vaesenc %xmm15,%xmm7,%xmm7 2226 vaesenc %xmm15,%xmm8,%xmm8 2227 2228 vpaddd eight(%rip),%xmm13,%xmm13 2229 vmovdqu 144(%rcx),%xmm15 2230 vaesenc %xmm15,%xmm1,%xmm1 2231 vaesenc %xmm15,%xmm2,%xmm2 2232 vaesenc %xmm15,%xmm3,%xmm3 2233 vaesenc %xmm15,%xmm4,%xmm4 2234 vaesenc %xmm15,%xmm5,%xmm5 2235 vaesenc %xmm15,%xmm6,%xmm6 2236 vaesenc %xmm15,%xmm7,%xmm7 2237 vaesenc %xmm15,%xmm8,%xmm8 2238 2239 vmovdqu 160(%rcx),%xmm15 2240 vaesenc %xmm15,%xmm1,%xmm1 2241 vaesenc %xmm15,%xmm2,%xmm2 2242 vaesenc %xmm15,%xmm3,%xmm3 2243 vaesenc %xmm15,%xmm4,%xmm4 2244 vaesenc %xmm15,%xmm5,%xmm5 2245 vaesenc %xmm15,%xmm6,%xmm6 2246 vaesenc %xmm15,%xmm7,%xmm7 2247 vaesenc %xmm15,%xmm8,%xmm8 2248 2249 vmovdqu 176(%rcx),%xmm15 2250 vaesenc %xmm15,%xmm1,%xmm1 2251 vaesenc %xmm15,%xmm2,%xmm2 2252 vaesenc %xmm15,%xmm3,%xmm3 2253 vaesenc %xmm15,%xmm4,%xmm4 2254 vaesenc %xmm15,%xmm5,%xmm5 2255 vaesenc %xmm15,%xmm6,%xmm6 2256 vaesenc %xmm15,%xmm7,%xmm7 2257 vaesenc %xmm15,%xmm8,%xmm8 2258 2259 vmovdqu 192(%rcx),%xmm15 2260 vaesenc %xmm15,%xmm1,%xmm1 2261 vaesenc %xmm15,%xmm2,%xmm2 2262 vaesenc %xmm15,%xmm3,%xmm3 2263 vaesenc %xmm15,%xmm4,%xmm4 2264 vaesenc %xmm15,%xmm5,%xmm5 2265 vaesenc %xmm15,%xmm6,%xmm6 2266 vaesenc %xmm15,%xmm7,%xmm7 2267 vaesenc %xmm15,%xmm8,%xmm8 2268 2269 vmovdqu 208(%rcx),%xmm15 2270 vaesenc %xmm15,%xmm1,%xmm1 2271 vaesenc %xmm15,%xmm2,%xmm2 2272 vaesenc %xmm15,%xmm3,%xmm3 2273 vaesenc %xmm15,%xmm4,%xmm4 2274 vaesenc %xmm15,%xmm5,%xmm5 2275 vaesenc %xmm15,%xmm6,%xmm6 2276 vaesenc %xmm15,%xmm7,%xmm7 2277 vaesenc %xmm15,%xmm8,%xmm8 2278 2279 vmovdqu 224(%rcx),%xmm15 2280 vaesenclast %xmm15,%xmm1,%xmm1 2281 vaesenclast %xmm15,%xmm2,%xmm2 2282 vaesenclast %xmm15,%xmm3,%xmm3 2283 vaesenclast %xmm15,%xmm4,%xmm4 2284 vaesenclast %xmm15,%xmm5,%xmm5 2285 vaesenclast %xmm15,%xmm6,%xmm6 2286 vaesenclast %xmm15,%xmm7,%xmm7 2287 vaesenclast %xmm15,%xmm8,%xmm8 2288 2289 2290 2291 vpxor 0(%rdi),%xmm1,%xmm1 2292 vpxor 16(%rdi),%xmm2,%xmm2 2293 vpxor 32(%rdi),%xmm3,%xmm3 2294 vpxor 48(%rdi),%xmm4,%xmm4 2295 vpxor 64(%rdi),%xmm5,%xmm5 2296 vpxor 80(%rdi),%xmm6,%xmm6 2297 vpxor 96(%rdi),%xmm7,%xmm7 2298 vpxor 112(%rdi),%xmm8,%xmm8 2299 2300 subq $1,%r8 2301 2302 vmovdqu %xmm1,0(%rsi) 2303 vmovdqu %xmm2,16(%rsi) 2304 vmovdqu %xmm3,32(%rsi) 2305 vmovdqu %xmm4,48(%rsi) 2306 vmovdqu %xmm5,64(%rsi) 2307 vmovdqu %xmm6,80(%rsi) 2308 vmovdqu %xmm7,96(%rsi) 2309 vmovdqu %xmm8,112(%rsi) 2310 2311 jne L$256_enc_msg_x8_loop1 2312 2313 addq $128,%rsi 2314 addq $128,%rdi 2315 2316L$256_enc_msg_x8_check_remainder: 2317 cmpq $0,%r10 2318 je L$256_enc_msg_x8_out 2319 2320L$256_enc_msg_x8_loop2: 2321 2322 2323 vmovdqa %xmm0,%xmm1 2324 vpaddd one(%rip),%xmm0,%xmm0 2325 2326 vpxor (%rcx),%xmm1,%xmm1 2327 vaesenc 16(%rcx),%xmm1,%xmm1 2328 vaesenc 32(%rcx),%xmm1,%xmm1 2329 vaesenc 48(%rcx),%xmm1,%xmm1 2330 vaesenc 64(%rcx),%xmm1,%xmm1 2331 vaesenc 80(%rcx),%xmm1,%xmm1 2332 vaesenc 96(%rcx),%xmm1,%xmm1 2333 vaesenc 112(%rcx),%xmm1,%xmm1 2334 vaesenc 128(%rcx),%xmm1,%xmm1 2335 vaesenc 144(%rcx),%xmm1,%xmm1 2336 vaesenc 160(%rcx),%xmm1,%xmm1 2337 vaesenc 176(%rcx),%xmm1,%xmm1 2338 vaesenc 192(%rcx),%xmm1,%xmm1 2339 vaesenc 208(%rcx),%xmm1,%xmm1 2340 vaesenclast 224(%rcx),%xmm1,%xmm1 2341 2342 2343 vpxor (%rdi),%xmm1,%xmm1 2344 2345 vmovdqu %xmm1,(%rsi) 2346 2347 addq $16,%rdi 2348 addq $16,%rsi 2349 subq $1,%r10 2350 jnz L$256_enc_msg_x8_loop2 2351 2352L$256_enc_msg_x8_out: 2353 .byte 0xf3,0xc3 2354 2355 2356 2357.globl _aes256gcmsiv_dec 2358.private_extern _aes256gcmsiv_dec 2359 2360.p2align 4 2361_aes256gcmsiv_dec: 2362 2363 testq $~15,%r9 2364 jnz L$256_dec_start 2365 .byte 0xf3,0xc3 2366 2367L$256_dec_start: 2368 vzeroupper 2369 vmovdqa (%rdx),%xmm0 2370 movq %rdx,%rax 2371 2372 leaq 32(%rax),%rax 2373 leaq 32(%rcx),%rcx 2374 2375 2376 vmovdqu (%rdi,%r9,1),%xmm15 2377 vpor OR_MASK(%rip),%xmm15,%xmm15 2378 andq $~15,%r9 2379 2380 2381 cmpq $96,%r9 2382 jb L$256_dec_loop2 2383 2384 2385 subq $96,%r9 2386 vmovdqa %xmm15,%xmm7 2387 vpaddd one(%rip),%xmm7,%xmm8 2388 vpaddd two(%rip),%xmm7,%xmm9 2389 vpaddd one(%rip),%xmm9,%xmm10 2390 vpaddd two(%rip),%xmm9,%xmm11 2391 vpaddd one(%rip),%xmm11,%xmm12 2392 vpaddd two(%rip),%xmm11,%xmm15 2393 2394 vpxor (%r8),%xmm7,%xmm7 2395 vpxor (%r8),%xmm8,%xmm8 2396 vpxor (%r8),%xmm9,%xmm9 2397 vpxor (%r8),%xmm10,%xmm10 2398 vpxor (%r8),%xmm11,%xmm11 2399 vpxor (%r8),%xmm12,%xmm12 2400 2401 vmovdqu 16(%r8),%xmm4 2402 vaesenc %xmm4,%xmm7,%xmm7 2403 vaesenc %xmm4,%xmm8,%xmm8 2404 vaesenc %xmm4,%xmm9,%xmm9 2405 vaesenc %xmm4,%xmm10,%xmm10 2406 vaesenc %xmm4,%xmm11,%xmm11 2407 vaesenc %xmm4,%xmm12,%xmm12 2408 2409 vmovdqu 32(%r8),%xmm4 2410 vaesenc %xmm4,%xmm7,%xmm7 2411 vaesenc %xmm4,%xmm8,%xmm8 2412 vaesenc %xmm4,%xmm9,%xmm9 2413 vaesenc %xmm4,%xmm10,%xmm10 2414 vaesenc %xmm4,%xmm11,%xmm11 2415 vaesenc %xmm4,%xmm12,%xmm12 2416 2417 vmovdqu 48(%r8),%xmm4 2418 vaesenc %xmm4,%xmm7,%xmm7 2419 vaesenc %xmm4,%xmm8,%xmm8 2420 vaesenc %xmm4,%xmm9,%xmm9 2421 vaesenc %xmm4,%xmm10,%xmm10 2422 vaesenc %xmm4,%xmm11,%xmm11 2423 vaesenc %xmm4,%xmm12,%xmm12 2424 2425 vmovdqu 64(%r8),%xmm4 2426 vaesenc %xmm4,%xmm7,%xmm7 2427 vaesenc %xmm4,%xmm8,%xmm8 2428 vaesenc %xmm4,%xmm9,%xmm9 2429 vaesenc %xmm4,%xmm10,%xmm10 2430 vaesenc %xmm4,%xmm11,%xmm11 2431 vaesenc %xmm4,%xmm12,%xmm12 2432 2433 vmovdqu 80(%r8),%xmm4 2434 vaesenc %xmm4,%xmm7,%xmm7 2435 vaesenc %xmm4,%xmm8,%xmm8 2436 vaesenc %xmm4,%xmm9,%xmm9 2437 vaesenc %xmm4,%xmm10,%xmm10 2438 vaesenc %xmm4,%xmm11,%xmm11 2439 vaesenc %xmm4,%xmm12,%xmm12 2440 2441 vmovdqu 96(%r8),%xmm4 2442 vaesenc %xmm4,%xmm7,%xmm7 2443 vaesenc %xmm4,%xmm8,%xmm8 2444 vaesenc %xmm4,%xmm9,%xmm9 2445 vaesenc %xmm4,%xmm10,%xmm10 2446 vaesenc %xmm4,%xmm11,%xmm11 2447 vaesenc %xmm4,%xmm12,%xmm12 2448 2449 vmovdqu 112(%r8),%xmm4 2450 vaesenc %xmm4,%xmm7,%xmm7 2451 vaesenc %xmm4,%xmm8,%xmm8 2452 vaesenc %xmm4,%xmm9,%xmm9 2453 vaesenc %xmm4,%xmm10,%xmm10 2454 vaesenc %xmm4,%xmm11,%xmm11 2455 vaesenc %xmm4,%xmm12,%xmm12 2456 2457 vmovdqu 128(%r8),%xmm4 2458 vaesenc %xmm4,%xmm7,%xmm7 2459 vaesenc %xmm4,%xmm8,%xmm8 2460 vaesenc %xmm4,%xmm9,%xmm9 2461 vaesenc %xmm4,%xmm10,%xmm10 2462 vaesenc %xmm4,%xmm11,%xmm11 2463 vaesenc %xmm4,%xmm12,%xmm12 2464 2465 vmovdqu 144(%r8),%xmm4 2466 vaesenc %xmm4,%xmm7,%xmm7 2467 vaesenc %xmm4,%xmm8,%xmm8 2468 vaesenc %xmm4,%xmm9,%xmm9 2469 vaesenc %xmm4,%xmm10,%xmm10 2470 vaesenc %xmm4,%xmm11,%xmm11 2471 vaesenc %xmm4,%xmm12,%xmm12 2472 2473 vmovdqu 160(%r8),%xmm4 2474 vaesenc %xmm4,%xmm7,%xmm7 2475 vaesenc %xmm4,%xmm8,%xmm8 2476 vaesenc %xmm4,%xmm9,%xmm9 2477 vaesenc %xmm4,%xmm10,%xmm10 2478 vaesenc %xmm4,%xmm11,%xmm11 2479 vaesenc %xmm4,%xmm12,%xmm12 2480 2481 vmovdqu 176(%r8),%xmm4 2482 vaesenc %xmm4,%xmm7,%xmm7 2483 vaesenc %xmm4,%xmm8,%xmm8 2484 vaesenc %xmm4,%xmm9,%xmm9 2485 vaesenc %xmm4,%xmm10,%xmm10 2486 vaesenc %xmm4,%xmm11,%xmm11 2487 vaesenc %xmm4,%xmm12,%xmm12 2488 2489 vmovdqu 192(%r8),%xmm4 2490 vaesenc %xmm4,%xmm7,%xmm7 2491 vaesenc %xmm4,%xmm8,%xmm8 2492 vaesenc %xmm4,%xmm9,%xmm9 2493 vaesenc %xmm4,%xmm10,%xmm10 2494 vaesenc %xmm4,%xmm11,%xmm11 2495 vaesenc %xmm4,%xmm12,%xmm12 2496 2497 vmovdqu 208(%r8),%xmm4 2498 vaesenc %xmm4,%xmm7,%xmm7 2499 vaesenc %xmm4,%xmm8,%xmm8 2500 vaesenc %xmm4,%xmm9,%xmm9 2501 vaesenc %xmm4,%xmm10,%xmm10 2502 vaesenc %xmm4,%xmm11,%xmm11 2503 vaesenc %xmm4,%xmm12,%xmm12 2504 2505 vmovdqu 224(%r8),%xmm4 2506 vaesenclast %xmm4,%xmm7,%xmm7 2507 vaesenclast %xmm4,%xmm8,%xmm8 2508 vaesenclast %xmm4,%xmm9,%xmm9 2509 vaesenclast %xmm4,%xmm10,%xmm10 2510 vaesenclast %xmm4,%xmm11,%xmm11 2511 vaesenclast %xmm4,%xmm12,%xmm12 2512 2513 2514 vpxor 0(%rdi),%xmm7,%xmm7 2515 vpxor 16(%rdi),%xmm8,%xmm8 2516 vpxor 32(%rdi),%xmm9,%xmm9 2517 vpxor 48(%rdi),%xmm10,%xmm10 2518 vpxor 64(%rdi),%xmm11,%xmm11 2519 vpxor 80(%rdi),%xmm12,%xmm12 2520 2521 vmovdqu %xmm7,0(%rsi) 2522 vmovdqu %xmm8,16(%rsi) 2523 vmovdqu %xmm9,32(%rsi) 2524 vmovdqu %xmm10,48(%rsi) 2525 vmovdqu %xmm11,64(%rsi) 2526 vmovdqu %xmm12,80(%rsi) 2527 2528 addq $96,%rdi 2529 addq $96,%rsi 2530 jmp L$256_dec_loop1 2531 2532 2533.p2align 6 2534L$256_dec_loop1: 2535 cmpq $96,%r9 2536 jb L$256_dec_finish_96 2537 subq $96,%r9 2538 2539 vmovdqa %xmm12,%xmm6 2540 vmovdqa %xmm11,16-32(%rax) 2541 vmovdqa %xmm10,32-32(%rax) 2542 vmovdqa %xmm9,48-32(%rax) 2543 vmovdqa %xmm8,64-32(%rax) 2544 vmovdqa %xmm7,80-32(%rax) 2545 2546 vmovdqa %xmm15,%xmm7 2547 vpaddd one(%rip),%xmm7,%xmm8 2548 vpaddd two(%rip),%xmm7,%xmm9 2549 vpaddd one(%rip),%xmm9,%xmm10 2550 vpaddd two(%rip),%xmm9,%xmm11 2551 vpaddd one(%rip),%xmm11,%xmm12 2552 vpaddd two(%rip),%xmm11,%xmm15 2553 2554 vmovdqa (%r8),%xmm4 2555 vpxor %xmm4,%xmm7,%xmm7 2556 vpxor %xmm4,%xmm8,%xmm8 2557 vpxor %xmm4,%xmm9,%xmm9 2558 vpxor %xmm4,%xmm10,%xmm10 2559 vpxor %xmm4,%xmm11,%xmm11 2560 vpxor %xmm4,%xmm12,%xmm12 2561 2562 vmovdqu 0-32(%rcx),%xmm4 2563 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 2564 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 2565 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm1 2566 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm4 2567 vpxor %xmm4,%xmm1,%xmm1 2568 2569 vmovdqu 16(%r8),%xmm4 2570 vaesenc %xmm4,%xmm7,%xmm7 2571 vaesenc %xmm4,%xmm8,%xmm8 2572 vaesenc %xmm4,%xmm9,%xmm9 2573 vaesenc %xmm4,%xmm10,%xmm10 2574 vaesenc %xmm4,%xmm11,%xmm11 2575 vaesenc %xmm4,%xmm12,%xmm12 2576 2577 vmovdqu -16(%rax),%xmm6 2578 vmovdqu -16(%rcx),%xmm13 2579 2580 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2581 vpxor %xmm4,%xmm1,%xmm1 2582 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2583 vpxor %xmm4,%xmm2,%xmm2 2584 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2585 vpxor %xmm4,%xmm3,%xmm3 2586 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2587 vpxor %xmm4,%xmm1,%xmm1 2588 2589 2590 vmovdqu 32(%r8),%xmm4 2591 vaesenc %xmm4,%xmm7,%xmm7 2592 vaesenc %xmm4,%xmm8,%xmm8 2593 vaesenc %xmm4,%xmm9,%xmm9 2594 vaesenc %xmm4,%xmm10,%xmm10 2595 vaesenc %xmm4,%xmm11,%xmm11 2596 vaesenc %xmm4,%xmm12,%xmm12 2597 2598 vmovdqu 0(%rax),%xmm6 2599 vmovdqu 0(%rcx),%xmm13 2600 2601 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2602 vpxor %xmm4,%xmm1,%xmm1 2603 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2604 vpxor %xmm4,%xmm2,%xmm2 2605 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2606 vpxor %xmm4,%xmm3,%xmm3 2607 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2608 vpxor %xmm4,%xmm1,%xmm1 2609 2610 2611 vmovdqu 48(%r8),%xmm4 2612 vaesenc %xmm4,%xmm7,%xmm7 2613 vaesenc %xmm4,%xmm8,%xmm8 2614 vaesenc %xmm4,%xmm9,%xmm9 2615 vaesenc %xmm4,%xmm10,%xmm10 2616 vaesenc %xmm4,%xmm11,%xmm11 2617 vaesenc %xmm4,%xmm12,%xmm12 2618 2619 vmovdqu 16(%rax),%xmm6 2620 vmovdqu 16(%rcx),%xmm13 2621 2622 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2623 vpxor %xmm4,%xmm1,%xmm1 2624 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2625 vpxor %xmm4,%xmm2,%xmm2 2626 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2627 vpxor %xmm4,%xmm3,%xmm3 2628 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2629 vpxor %xmm4,%xmm1,%xmm1 2630 2631 2632 vmovdqu 64(%r8),%xmm4 2633 vaesenc %xmm4,%xmm7,%xmm7 2634 vaesenc %xmm4,%xmm8,%xmm8 2635 vaesenc %xmm4,%xmm9,%xmm9 2636 vaesenc %xmm4,%xmm10,%xmm10 2637 vaesenc %xmm4,%xmm11,%xmm11 2638 vaesenc %xmm4,%xmm12,%xmm12 2639 2640 vmovdqu 32(%rax),%xmm6 2641 vmovdqu 32(%rcx),%xmm13 2642 2643 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2644 vpxor %xmm4,%xmm1,%xmm1 2645 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2646 vpxor %xmm4,%xmm2,%xmm2 2647 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2648 vpxor %xmm4,%xmm3,%xmm3 2649 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2650 vpxor %xmm4,%xmm1,%xmm1 2651 2652 2653 vmovdqu 80(%r8),%xmm4 2654 vaesenc %xmm4,%xmm7,%xmm7 2655 vaesenc %xmm4,%xmm8,%xmm8 2656 vaesenc %xmm4,%xmm9,%xmm9 2657 vaesenc %xmm4,%xmm10,%xmm10 2658 vaesenc %xmm4,%xmm11,%xmm11 2659 vaesenc %xmm4,%xmm12,%xmm12 2660 2661 vmovdqu 96(%r8),%xmm4 2662 vaesenc %xmm4,%xmm7,%xmm7 2663 vaesenc %xmm4,%xmm8,%xmm8 2664 vaesenc %xmm4,%xmm9,%xmm9 2665 vaesenc %xmm4,%xmm10,%xmm10 2666 vaesenc %xmm4,%xmm11,%xmm11 2667 vaesenc %xmm4,%xmm12,%xmm12 2668 2669 vmovdqu 112(%r8),%xmm4 2670 vaesenc %xmm4,%xmm7,%xmm7 2671 vaesenc %xmm4,%xmm8,%xmm8 2672 vaesenc %xmm4,%xmm9,%xmm9 2673 vaesenc %xmm4,%xmm10,%xmm10 2674 vaesenc %xmm4,%xmm11,%xmm11 2675 vaesenc %xmm4,%xmm12,%xmm12 2676 2677 2678 vmovdqa 80-32(%rax),%xmm6 2679 vpxor %xmm0,%xmm6,%xmm6 2680 vmovdqu 80-32(%rcx),%xmm5 2681 2682 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 2683 vpxor %xmm4,%xmm1,%xmm1 2684 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 2685 vpxor %xmm4,%xmm2,%xmm2 2686 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 2687 vpxor %xmm4,%xmm3,%xmm3 2688 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 2689 vpxor %xmm4,%xmm1,%xmm1 2690 2691 vmovdqu 128(%r8),%xmm4 2692 vaesenc %xmm4,%xmm7,%xmm7 2693 vaesenc %xmm4,%xmm8,%xmm8 2694 vaesenc %xmm4,%xmm9,%xmm9 2695 vaesenc %xmm4,%xmm10,%xmm10 2696 vaesenc %xmm4,%xmm11,%xmm11 2697 vaesenc %xmm4,%xmm12,%xmm12 2698 2699 2700 vpsrldq $8,%xmm1,%xmm4 2701 vpxor %xmm4,%xmm2,%xmm5 2702 vpslldq $8,%xmm1,%xmm4 2703 vpxor %xmm4,%xmm3,%xmm0 2704 2705 vmovdqa poly(%rip),%xmm3 2706 2707 vmovdqu 144(%r8),%xmm4 2708 vaesenc %xmm4,%xmm7,%xmm7 2709 vaesenc %xmm4,%xmm8,%xmm8 2710 vaesenc %xmm4,%xmm9,%xmm9 2711 vaesenc %xmm4,%xmm10,%xmm10 2712 vaesenc %xmm4,%xmm11,%xmm11 2713 vaesenc %xmm4,%xmm12,%xmm12 2714 2715 vmovdqu 160(%r8),%xmm4 2716 vaesenc %xmm4,%xmm7,%xmm7 2717 vaesenc %xmm4,%xmm8,%xmm8 2718 vaesenc %xmm4,%xmm9,%xmm9 2719 vaesenc %xmm4,%xmm10,%xmm10 2720 vaesenc %xmm4,%xmm11,%xmm11 2721 vaesenc %xmm4,%xmm12,%xmm12 2722 2723 vmovdqu 176(%r8),%xmm4 2724 vaesenc %xmm4,%xmm7,%xmm7 2725 vaesenc %xmm4,%xmm8,%xmm8 2726 vaesenc %xmm4,%xmm9,%xmm9 2727 vaesenc %xmm4,%xmm10,%xmm10 2728 vaesenc %xmm4,%xmm11,%xmm11 2729 vaesenc %xmm4,%xmm12,%xmm12 2730 2731 vmovdqu 192(%r8),%xmm4 2732 vaesenc %xmm4,%xmm7,%xmm7 2733 vaesenc %xmm4,%xmm8,%xmm8 2734 vaesenc %xmm4,%xmm9,%xmm9 2735 vaesenc %xmm4,%xmm10,%xmm10 2736 vaesenc %xmm4,%xmm11,%xmm11 2737 vaesenc %xmm4,%xmm12,%xmm12 2738 2739 vmovdqu 208(%r8),%xmm4 2740 vaesenc %xmm4,%xmm7,%xmm7 2741 vaesenc %xmm4,%xmm8,%xmm8 2742 vaesenc %xmm4,%xmm9,%xmm9 2743 vaesenc %xmm4,%xmm10,%xmm10 2744 vaesenc %xmm4,%xmm11,%xmm11 2745 vaesenc %xmm4,%xmm12,%xmm12 2746 2747 vmovdqu 224(%r8),%xmm6 2748 vpalignr $8,%xmm0,%xmm0,%xmm2 2749 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2750 vpxor %xmm0,%xmm2,%xmm0 2751 2752 vpxor 0(%rdi),%xmm6,%xmm4 2753 vaesenclast %xmm4,%xmm7,%xmm7 2754 vpxor 16(%rdi),%xmm6,%xmm4 2755 vaesenclast %xmm4,%xmm8,%xmm8 2756 vpxor 32(%rdi),%xmm6,%xmm4 2757 vaesenclast %xmm4,%xmm9,%xmm9 2758 vpxor 48(%rdi),%xmm6,%xmm4 2759 vaesenclast %xmm4,%xmm10,%xmm10 2760 vpxor 64(%rdi),%xmm6,%xmm4 2761 vaesenclast %xmm4,%xmm11,%xmm11 2762 vpxor 80(%rdi),%xmm6,%xmm4 2763 vaesenclast %xmm4,%xmm12,%xmm12 2764 2765 vpalignr $8,%xmm0,%xmm0,%xmm2 2766 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2767 vpxor %xmm0,%xmm2,%xmm0 2768 2769 vmovdqu %xmm7,0(%rsi) 2770 vmovdqu %xmm8,16(%rsi) 2771 vmovdqu %xmm9,32(%rsi) 2772 vmovdqu %xmm10,48(%rsi) 2773 vmovdqu %xmm11,64(%rsi) 2774 vmovdqu %xmm12,80(%rsi) 2775 2776 vpxor %xmm5,%xmm0,%xmm0 2777 2778 leaq 96(%rdi),%rdi 2779 leaq 96(%rsi),%rsi 2780 jmp L$256_dec_loop1 2781 2782L$256_dec_finish_96: 2783 vmovdqa %xmm12,%xmm6 2784 vmovdqa %xmm11,16-32(%rax) 2785 vmovdqa %xmm10,32-32(%rax) 2786 vmovdqa %xmm9,48-32(%rax) 2787 vmovdqa %xmm8,64-32(%rax) 2788 vmovdqa %xmm7,80-32(%rax) 2789 2790 vmovdqu 0-32(%rcx),%xmm4 2791 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm1 2792 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 2793 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 2794 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm4 2795 vpxor %xmm4,%xmm1,%xmm1 2796 2797 vmovdqu -16(%rax),%xmm6 2798 vmovdqu -16(%rcx),%xmm13 2799 2800 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2801 vpxor %xmm4,%xmm1,%xmm1 2802 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2803 vpxor %xmm4,%xmm2,%xmm2 2804 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2805 vpxor %xmm4,%xmm3,%xmm3 2806 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2807 vpxor %xmm4,%xmm1,%xmm1 2808 2809 vmovdqu 0(%rax),%xmm6 2810 vmovdqu 0(%rcx),%xmm13 2811 2812 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2813 vpxor %xmm4,%xmm1,%xmm1 2814 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2815 vpxor %xmm4,%xmm2,%xmm2 2816 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2817 vpxor %xmm4,%xmm3,%xmm3 2818 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2819 vpxor %xmm4,%xmm1,%xmm1 2820 2821 vmovdqu 16(%rax),%xmm6 2822 vmovdqu 16(%rcx),%xmm13 2823 2824 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2825 vpxor %xmm4,%xmm1,%xmm1 2826 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2827 vpxor %xmm4,%xmm2,%xmm2 2828 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2829 vpxor %xmm4,%xmm3,%xmm3 2830 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2831 vpxor %xmm4,%xmm1,%xmm1 2832 2833 vmovdqu 32(%rax),%xmm6 2834 vmovdqu 32(%rcx),%xmm13 2835 2836 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2837 vpxor %xmm4,%xmm1,%xmm1 2838 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2839 vpxor %xmm4,%xmm2,%xmm2 2840 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2841 vpxor %xmm4,%xmm3,%xmm3 2842 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2843 vpxor %xmm4,%xmm1,%xmm1 2844 2845 2846 vmovdqu 80-32(%rax),%xmm6 2847 vpxor %xmm0,%xmm6,%xmm6 2848 vmovdqu 80-32(%rcx),%xmm5 2849 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 2850 vpxor %xmm4,%xmm2,%xmm2 2851 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 2852 vpxor %xmm4,%xmm3,%xmm3 2853 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 2854 vpxor %xmm4,%xmm1,%xmm1 2855 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 2856 vpxor %xmm4,%xmm1,%xmm1 2857 2858 vpsrldq $8,%xmm1,%xmm4 2859 vpxor %xmm4,%xmm2,%xmm5 2860 vpslldq $8,%xmm1,%xmm4 2861 vpxor %xmm4,%xmm3,%xmm0 2862 2863 vmovdqa poly(%rip),%xmm3 2864 2865 vpalignr $8,%xmm0,%xmm0,%xmm2 2866 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2867 vpxor %xmm0,%xmm2,%xmm0 2868 2869 vpalignr $8,%xmm0,%xmm0,%xmm2 2870 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2871 vpxor %xmm0,%xmm2,%xmm0 2872 2873 vpxor %xmm5,%xmm0,%xmm0 2874 2875L$256_dec_loop2: 2876 2877 2878 2879 cmpq $16,%r9 2880 jb L$256_dec_out 2881 subq $16,%r9 2882 2883 vmovdqa %xmm15,%xmm2 2884 vpaddd one(%rip),%xmm15,%xmm15 2885 2886 vpxor 0(%r8),%xmm2,%xmm2 2887 vaesenc 16(%r8),%xmm2,%xmm2 2888 vaesenc 32(%r8),%xmm2,%xmm2 2889 vaesenc 48(%r8),%xmm2,%xmm2 2890 vaesenc 64(%r8),%xmm2,%xmm2 2891 vaesenc 80(%r8),%xmm2,%xmm2 2892 vaesenc 96(%r8),%xmm2,%xmm2 2893 vaesenc 112(%r8),%xmm2,%xmm2 2894 vaesenc 128(%r8),%xmm2,%xmm2 2895 vaesenc 144(%r8),%xmm2,%xmm2 2896 vaesenc 160(%r8),%xmm2,%xmm2 2897 vaesenc 176(%r8),%xmm2,%xmm2 2898 vaesenc 192(%r8),%xmm2,%xmm2 2899 vaesenc 208(%r8),%xmm2,%xmm2 2900 vaesenclast 224(%r8),%xmm2,%xmm2 2901 vpxor (%rdi),%xmm2,%xmm2 2902 vmovdqu %xmm2,(%rsi) 2903 addq $16,%rdi 2904 addq $16,%rsi 2905 2906 vpxor %xmm2,%xmm0,%xmm0 2907 vmovdqa -32(%rcx),%xmm1 2908 call GFMUL 2909 2910 jmp L$256_dec_loop2 2911 2912L$256_dec_out: 2913 vmovdqu %xmm0,(%rdx) 2914 .byte 0xf3,0xc3 2915 2916 2917.globl _aes256gcmsiv_kdf 2918.private_extern _aes256gcmsiv_kdf 2919 2920.p2align 4 2921_aes256gcmsiv_kdf: 2922 2923 2924 2925 2926 2927 vmovdqa (%rdx),%xmm1 2928 vmovdqa 0(%rdi),%xmm4 2929 vmovdqa and_mask(%rip),%xmm11 2930 vmovdqa one(%rip),%xmm8 2931 vpshufd $0x90,%xmm4,%xmm4 2932 vpand %xmm11,%xmm4,%xmm4 2933 vpaddd %xmm8,%xmm4,%xmm6 2934 vpaddd %xmm8,%xmm6,%xmm7 2935 vpaddd %xmm8,%xmm7,%xmm11 2936 vpaddd %xmm8,%xmm11,%xmm12 2937 vpaddd %xmm8,%xmm12,%xmm13 2938 2939 vpxor %xmm1,%xmm4,%xmm4 2940 vpxor %xmm1,%xmm6,%xmm6 2941 vpxor %xmm1,%xmm7,%xmm7 2942 vpxor %xmm1,%xmm11,%xmm11 2943 vpxor %xmm1,%xmm12,%xmm12 2944 vpxor %xmm1,%xmm13,%xmm13 2945 2946 vmovdqa 16(%rdx),%xmm1 2947 vaesenc %xmm1,%xmm4,%xmm4 2948 vaesenc %xmm1,%xmm6,%xmm6 2949 vaesenc %xmm1,%xmm7,%xmm7 2950 vaesenc %xmm1,%xmm11,%xmm11 2951 vaesenc %xmm1,%xmm12,%xmm12 2952 vaesenc %xmm1,%xmm13,%xmm13 2953 2954 vmovdqa 32(%rdx),%xmm2 2955 vaesenc %xmm2,%xmm4,%xmm4 2956 vaesenc %xmm2,%xmm6,%xmm6 2957 vaesenc %xmm2,%xmm7,%xmm7 2958 vaesenc %xmm2,%xmm11,%xmm11 2959 vaesenc %xmm2,%xmm12,%xmm12 2960 vaesenc %xmm2,%xmm13,%xmm13 2961 2962 vmovdqa 48(%rdx),%xmm1 2963 vaesenc %xmm1,%xmm4,%xmm4 2964 vaesenc %xmm1,%xmm6,%xmm6 2965 vaesenc %xmm1,%xmm7,%xmm7 2966 vaesenc %xmm1,%xmm11,%xmm11 2967 vaesenc %xmm1,%xmm12,%xmm12 2968 vaesenc %xmm1,%xmm13,%xmm13 2969 2970 vmovdqa 64(%rdx),%xmm2 2971 vaesenc %xmm2,%xmm4,%xmm4 2972 vaesenc %xmm2,%xmm6,%xmm6 2973 vaesenc %xmm2,%xmm7,%xmm7 2974 vaesenc %xmm2,%xmm11,%xmm11 2975 vaesenc %xmm2,%xmm12,%xmm12 2976 vaesenc %xmm2,%xmm13,%xmm13 2977 2978 vmovdqa 80(%rdx),%xmm1 2979 vaesenc %xmm1,%xmm4,%xmm4 2980 vaesenc %xmm1,%xmm6,%xmm6 2981 vaesenc %xmm1,%xmm7,%xmm7 2982 vaesenc %xmm1,%xmm11,%xmm11 2983 vaesenc %xmm1,%xmm12,%xmm12 2984 vaesenc %xmm1,%xmm13,%xmm13 2985 2986 vmovdqa 96(%rdx),%xmm2 2987 vaesenc %xmm2,%xmm4,%xmm4 2988 vaesenc %xmm2,%xmm6,%xmm6 2989 vaesenc %xmm2,%xmm7,%xmm7 2990 vaesenc %xmm2,%xmm11,%xmm11 2991 vaesenc %xmm2,%xmm12,%xmm12 2992 vaesenc %xmm2,%xmm13,%xmm13 2993 2994 vmovdqa 112(%rdx),%xmm1 2995 vaesenc %xmm1,%xmm4,%xmm4 2996 vaesenc %xmm1,%xmm6,%xmm6 2997 vaesenc %xmm1,%xmm7,%xmm7 2998 vaesenc %xmm1,%xmm11,%xmm11 2999 vaesenc %xmm1,%xmm12,%xmm12 3000 vaesenc %xmm1,%xmm13,%xmm13 3001 3002 vmovdqa 128(%rdx),%xmm2 3003 vaesenc %xmm2,%xmm4,%xmm4 3004 vaesenc %xmm2,%xmm6,%xmm6 3005 vaesenc %xmm2,%xmm7,%xmm7 3006 vaesenc %xmm2,%xmm11,%xmm11 3007 vaesenc %xmm2,%xmm12,%xmm12 3008 vaesenc %xmm2,%xmm13,%xmm13 3009 3010 vmovdqa 144(%rdx),%xmm1 3011 vaesenc %xmm1,%xmm4,%xmm4 3012 vaesenc %xmm1,%xmm6,%xmm6 3013 vaesenc %xmm1,%xmm7,%xmm7 3014 vaesenc %xmm1,%xmm11,%xmm11 3015 vaesenc %xmm1,%xmm12,%xmm12 3016 vaesenc %xmm1,%xmm13,%xmm13 3017 3018 vmovdqa 160(%rdx),%xmm2 3019 vaesenc %xmm2,%xmm4,%xmm4 3020 vaesenc %xmm2,%xmm6,%xmm6 3021 vaesenc %xmm2,%xmm7,%xmm7 3022 vaesenc %xmm2,%xmm11,%xmm11 3023 vaesenc %xmm2,%xmm12,%xmm12 3024 vaesenc %xmm2,%xmm13,%xmm13 3025 3026 vmovdqa 176(%rdx),%xmm1 3027 vaesenc %xmm1,%xmm4,%xmm4 3028 vaesenc %xmm1,%xmm6,%xmm6 3029 vaesenc %xmm1,%xmm7,%xmm7 3030 vaesenc %xmm1,%xmm11,%xmm11 3031 vaesenc %xmm1,%xmm12,%xmm12 3032 vaesenc %xmm1,%xmm13,%xmm13 3033 3034 vmovdqa 192(%rdx),%xmm2 3035 vaesenc %xmm2,%xmm4,%xmm4 3036 vaesenc %xmm2,%xmm6,%xmm6 3037 vaesenc %xmm2,%xmm7,%xmm7 3038 vaesenc %xmm2,%xmm11,%xmm11 3039 vaesenc %xmm2,%xmm12,%xmm12 3040 vaesenc %xmm2,%xmm13,%xmm13 3041 3042 vmovdqa 208(%rdx),%xmm1 3043 vaesenc %xmm1,%xmm4,%xmm4 3044 vaesenc %xmm1,%xmm6,%xmm6 3045 vaesenc %xmm1,%xmm7,%xmm7 3046 vaesenc %xmm1,%xmm11,%xmm11 3047 vaesenc %xmm1,%xmm12,%xmm12 3048 vaesenc %xmm1,%xmm13,%xmm13 3049 3050 vmovdqa 224(%rdx),%xmm2 3051 vaesenclast %xmm2,%xmm4,%xmm4 3052 vaesenclast %xmm2,%xmm6,%xmm6 3053 vaesenclast %xmm2,%xmm7,%xmm7 3054 vaesenclast %xmm2,%xmm11,%xmm11 3055 vaesenclast %xmm2,%xmm12,%xmm12 3056 vaesenclast %xmm2,%xmm13,%xmm13 3057 3058 3059 vmovdqa %xmm4,0(%rsi) 3060 vmovdqa %xmm6,16(%rsi) 3061 vmovdqa %xmm7,32(%rsi) 3062 vmovdqa %xmm11,48(%rsi) 3063 vmovdqa %xmm12,64(%rsi) 3064 vmovdqa %xmm13,80(%rsi) 3065 .byte 0xf3,0xc3 3066 3067 3068#endif 3069