1#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) 2.text 3 4.type _aesni_ctr32_ghash_6x,@function 5.align 32 6_aesni_ctr32_ghash_6x: 7.cfi_startproc 8 vmovdqu 32(%r11),%xmm2 9 subq $6,%rdx 10 vpxor %xmm4,%xmm4,%xmm4 11 vmovdqu 0-128(%rcx),%xmm15 12 vpaddb %xmm2,%xmm1,%xmm10 13 vpaddb %xmm2,%xmm10,%xmm11 14 vpaddb %xmm2,%xmm11,%xmm12 15 vpaddb %xmm2,%xmm12,%xmm13 16 vpaddb %xmm2,%xmm13,%xmm14 17 vpxor %xmm15,%xmm1,%xmm9 18 vmovdqu %xmm4,16+8(%rsp) 19 jmp .Loop6x 20 21.align 32 22.Loop6x: 23 addl $100663296,%ebx 24 jc .Lhandle_ctr32 25 vmovdqu 0-32(%r9),%xmm3 26 vpaddb %xmm2,%xmm14,%xmm1 27 vpxor %xmm15,%xmm10,%xmm10 28 vpxor %xmm15,%xmm11,%xmm11 29 30.Lresume_ctr32: 31 vmovdqu %xmm1,(%r8) 32 vpclmulqdq $0x10,%xmm3,%xmm7,%xmm5 33 vpxor %xmm15,%xmm12,%xmm12 34 vmovups 16-128(%rcx),%xmm2 35 vpclmulqdq $0x01,%xmm3,%xmm7,%xmm6 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 xorq %r12,%r12 54 cmpq %r14,%r15 55 56 vaesenc %xmm2,%xmm9,%xmm9 57 vmovdqu 48+8(%rsp),%xmm0 58 vpxor %xmm15,%xmm13,%xmm13 59 vpclmulqdq $0x00,%xmm3,%xmm7,%xmm1 60 vaesenc %xmm2,%xmm10,%xmm10 61 vpxor %xmm15,%xmm14,%xmm14 62 setnc %r12b 63 vpclmulqdq $0x11,%xmm3,%xmm7,%xmm7 64 vaesenc %xmm2,%xmm11,%xmm11 65 vmovdqu 16-32(%r9),%xmm3 66 negq %r12 67 vaesenc %xmm2,%xmm12,%xmm12 68 vpxor %xmm5,%xmm6,%xmm6 69 vpclmulqdq $0x00,%xmm3,%xmm0,%xmm5 70 vpxor %xmm4,%xmm8,%xmm8 71 vaesenc %xmm2,%xmm13,%xmm13 72 vpxor %xmm5,%xmm1,%xmm4 73 andq $0x60,%r12 74 vmovups 32-128(%rcx),%xmm15 75 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm1 76 vaesenc %xmm2,%xmm14,%xmm14 77 78 vpclmulqdq $0x01,%xmm3,%xmm0,%xmm2 79 leaq (%r14,%r12,1),%r14 80 vaesenc %xmm15,%xmm9,%xmm9 81 vpxor 16+8(%rsp),%xmm8,%xmm8 82 vpclmulqdq $0x11,%xmm3,%xmm0,%xmm3 83 vmovdqu 64+8(%rsp),%xmm0 84 vaesenc %xmm15,%xmm10,%xmm10 85 movbeq 88(%r14),%r13 86 vaesenc %xmm15,%xmm11,%xmm11 87 movbeq 80(%r14),%r12 88 vaesenc %xmm15,%xmm12,%xmm12 89 movq %r13,32+8(%rsp) 90 vaesenc %xmm15,%xmm13,%xmm13 91 movq %r12,40+8(%rsp) 92 vmovdqu 48-32(%r9),%xmm5 93 vaesenc %xmm15,%xmm14,%xmm14 94 95 vmovups 48-128(%rcx),%xmm15 96 vpxor %xmm1,%xmm6,%xmm6 97 vpclmulqdq $0x00,%xmm5,%xmm0,%xmm1 98 vaesenc %xmm15,%xmm9,%xmm9 99 vpxor %xmm2,%xmm6,%xmm6 100 vpclmulqdq $0x10,%xmm5,%xmm0,%xmm2 101 vaesenc %xmm15,%xmm10,%xmm10 102 vpxor %xmm3,%xmm7,%xmm7 103 vpclmulqdq $0x01,%xmm5,%xmm0,%xmm3 104 vaesenc %xmm15,%xmm11,%xmm11 105 vpclmulqdq $0x11,%xmm5,%xmm0,%xmm5 106 vmovdqu 80+8(%rsp),%xmm0 107 vaesenc %xmm15,%xmm12,%xmm12 108 vaesenc %xmm15,%xmm13,%xmm13 109 vpxor %xmm1,%xmm4,%xmm4 110 vmovdqu 64-32(%r9),%xmm1 111 vaesenc %xmm15,%xmm14,%xmm14 112 113 vmovups 64-128(%rcx),%xmm15 114 vpxor %xmm2,%xmm6,%xmm6 115 vpclmulqdq $0x00,%xmm1,%xmm0,%xmm2 116 vaesenc %xmm15,%xmm9,%xmm9 117 vpxor %xmm3,%xmm6,%xmm6 118 vpclmulqdq $0x10,%xmm1,%xmm0,%xmm3 119 vaesenc %xmm15,%xmm10,%xmm10 120 movbeq 72(%r14),%r13 121 vpxor %xmm5,%xmm7,%xmm7 122 vpclmulqdq $0x01,%xmm1,%xmm0,%xmm5 123 vaesenc %xmm15,%xmm11,%xmm11 124 movbeq 64(%r14),%r12 125 vpclmulqdq $0x11,%xmm1,%xmm0,%xmm1 126 vmovdqu 96+8(%rsp),%xmm0 127 vaesenc %xmm15,%xmm12,%xmm12 128 movq %r13,48+8(%rsp) 129 vaesenc %xmm15,%xmm13,%xmm13 130 movq %r12,56+8(%rsp) 131 vpxor %xmm2,%xmm4,%xmm4 132 vmovdqu 96-32(%r9),%xmm2 133 vaesenc %xmm15,%xmm14,%xmm14 134 135 vmovups 80-128(%rcx),%xmm15 136 vpxor %xmm3,%xmm6,%xmm6 137 vpclmulqdq $0x00,%xmm2,%xmm0,%xmm3 138 vaesenc %xmm15,%xmm9,%xmm9 139 vpxor %xmm5,%xmm6,%xmm6 140 vpclmulqdq $0x10,%xmm2,%xmm0,%xmm5 141 vaesenc %xmm15,%xmm10,%xmm10 142 movbeq 56(%r14),%r13 143 vpxor %xmm1,%xmm7,%xmm7 144 vpclmulqdq $0x01,%xmm2,%xmm0,%xmm1 145 vpxor 112+8(%rsp),%xmm8,%xmm8 146 vaesenc %xmm15,%xmm11,%xmm11 147 movbeq 48(%r14),%r12 148 vpclmulqdq $0x11,%xmm2,%xmm0,%xmm2 149 vaesenc %xmm15,%xmm12,%xmm12 150 movq %r13,64+8(%rsp) 151 vaesenc %xmm15,%xmm13,%xmm13 152 movq %r12,72+8(%rsp) 153 vpxor %xmm3,%xmm4,%xmm4 154 vmovdqu 112-32(%r9),%xmm3 155 vaesenc %xmm15,%xmm14,%xmm14 156 157 vmovups 96-128(%rcx),%xmm15 158 vpxor %xmm5,%xmm6,%xmm6 159 vpclmulqdq $0x10,%xmm3,%xmm8,%xmm5 160 vaesenc %xmm15,%xmm9,%xmm9 161 vpxor %xmm1,%xmm6,%xmm6 162 vpclmulqdq $0x01,%xmm3,%xmm8,%xmm1 163 vaesenc %xmm15,%xmm10,%xmm10 164 movbeq 40(%r14),%r13 165 vpxor %xmm2,%xmm7,%xmm7 166 vpclmulqdq $0x00,%xmm3,%xmm8,%xmm2 167 vaesenc %xmm15,%xmm11,%xmm11 168 movbeq 32(%r14),%r12 169 vpclmulqdq $0x11,%xmm3,%xmm8,%xmm8 170 vaesenc %xmm15,%xmm12,%xmm12 171 movq %r13,80+8(%rsp) 172 vaesenc %xmm15,%xmm13,%xmm13 173 movq %r12,88+8(%rsp) 174 vpxor %xmm5,%xmm6,%xmm6 175 vaesenc %xmm15,%xmm14,%xmm14 176 vpxor %xmm1,%xmm6,%xmm6 177 178 vmovups 112-128(%rcx),%xmm15 179 vpslldq $8,%xmm6,%xmm5 180 vpxor %xmm2,%xmm4,%xmm4 181 vmovdqu 16(%r11),%xmm3 182 183 vaesenc %xmm15,%xmm9,%xmm9 184 vpxor %xmm8,%xmm7,%xmm7 185 vaesenc %xmm15,%xmm10,%xmm10 186 vpxor %xmm5,%xmm4,%xmm4 187 movbeq 24(%r14),%r13 188 vaesenc %xmm15,%xmm11,%xmm11 189 movbeq 16(%r14),%r12 190 vpalignr $8,%xmm4,%xmm4,%xmm0 191 vpclmulqdq $0x10,%xmm3,%xmm4,%xmm4 192 movq %r13,96+8(%rsp) 193 vaesenc %xmm15,%xmm12,%xmm12 194 movq %r12,104+8(%rsp) 195 vaesenc %xmm15,%xmm13,%xmm13 196 vmovups 128-128(%rcx),%xmm1 197 vaesenc %xmm15,%xmm14,%xmm14 198 199 vaesenc %xmm1,%xmm9,%xmm9 200 vmovups 144-128(%rcx),%xmm15 201 vaesenc %xmm1,%xmm10,%xmm10 202 vpsrldq $8,%xmm6,%xmm6 203 vaesenc %xmm1,%xmm11,%xmm11 204 vpxor %xmm6,%xmm7,%xmm7 205 vaesenc %xmm1,%xmm12,%xmm12 206 vpxor %xmm0,%xmm4,%xmm4 207 movbeq 8(%r14),%r13 208 vaesenc %xmm1,%xmm13,%xmm13 209 movbeq 0(%r14),%r12 210 vaesenc %xmm1,%xmm14,%xmm14 211 vmovups 160-128(%rcx),%xmm1 212 cmpl $11,%ebp 213 jb .Lenc_tail 214 215 vaesenc %xmm15,%xmm9,%xmm9 216 vaesenc %xmm15,%xmm10,%xmm10 217 vaesenc %xmm15,%xmm11,%xmm11 218 vaesenc %xmm15,%xmm12,%xmm12 219 vaesenc %xmm15,%xmm13,%xmm13 220 vaesenc %xmm15,%xmm14,%xmm14 221 222 vaesenc %xmm1,%xmm9,%xmm9 223 vaesenc %xmm1,%xmm10,%xmm10 224 vaesenc %xmm1,%xmm11,%xmm11 225 vaesenc %xmm1,%xmm12,%xmm12 226 vaesenc %xmm1,%xmm13,%xmm13 227 vmovups 176-128(%rcx),%xmm15 228 vaesenc %xmm1,%xmm14,%xmm14 229 vmovups 192-128(%rcx),%xmm1 230 je .Lenc_tail 231 232 vaesenc %xmm15,%xmm9,%xmm9 233 vaesenc %xmm15,%xmm10,%xmm10 234 vaesenc %xmm15,%xmm11,%xmm11 235 vaesenc %xmm15,%xmm12,%xmm12 236 vaesenc %xmm15,%xmm13,%xmm13 237 vaesenc %xmm15,%xmm14,%xmm14 238 239 vaesenc %xmm1,%xmm9,%xmm9 240 vaesenc %xmm1,%xmm10,%xmm10 241 vaesenc %xmm1,%xmm11,%xmm11 242 vaesenc %xmm1,%xmm12,%xmm12 243 vaesenc %xmm1,%xmm13,%xmm13 244 vmovups 208-128(%rcx),%xmm15 245 vaesenc %xmm1,%xmm14,%xmm14 246 vmovups 224-128(%rcx),%xmm1 247 jmp .Lenc_tail 248 249.align 32 250.Lhandle_ctr32: 251 vmovdqu (%r11),%xmm0 252 vpshufb %xmm0,%xmm1,%xmm6 253 vmovdqu 48(%r11),%xmm5 254 vpaddd 64(%r11),%xmm6,%xmm10 255 vpaddd %xmm5,%xmm6,%xmm11 256 vmovdqu 0-32(%r9),%xmm3 257 vpaddd %xmm5,%xmm10,%xmm12 258 vpshufb %xmm0,%xmm10,%xmm10 259 vpaddd %xmm5,%xmm11,%xmm13 260 vpshufb %xmm0,%xmm11,%xmm11 261 vpxor %xmm15,%xmm10,%xmm10 262 vpaddd %xmm5,%xmm12,%xmm14 263 vpshufb %xmm0,%xmm12,%xmm12 264 vpxor %xmm15,%xmm11,%xmm11 265 vpaddd %xmm5,%xmm13,%xmm1 266 vpshufb %xmm0,%xmm13,%xmm13 267 vpshufb %xmm0,%xmm14,%xmm14 268 vpshufb %xmm0,%xmm1,%xmm1 269 jmp .Lresume_ctr32 270 271.align 32 272.Lenc_tail: 273 vaesenc %xmm15,%xmm9,%xmm9 274 vmovdqu %xmm7,16+8(%rsp) 275 vpalignr $8,%xmm4,%xmm4,%xmm8 276 vaesenc %xmm15,%xmm10,%xmm10 277 vpclmulqdq $0x10,%xmm3,%xmm4,%xmm4 278 vpxor 0(%rdi),%xmm1,%xmm2 279 vaesenc %xmm15,%xmm11,%xmm11 280 vpxor 16(%rdi),%xmm1,%xmm0 281 vaesenc %xmm15,%xmm12,%xmm12 282 vpxor 32(%rdi),%xmm1,%xmm5 283 vaesenc %xmm15,%xmm13,%xmm13 284 vpxor 48(%rdi),%xmm1,%xmm6 285 vaesenc %xmm15,%xmm14,%xmm14 286 vpxor 64(%rdi),%xmm1,%xmm7 287 vpxor 80(%rdi),%xmm1,%xmm3 288 vmovdqu (%r8),%xmm1 289 290 vaesenclast %xmm2,%xmm9,%xmm9 291 vmovdqu 32(%r11),%xmm2 292 vaesenclast %xmm0,%xmm10,%xmm10 293 vpaddb %xmm2,%xmm1,%xmm0 294 movq %r13,112+8(%rsp) 295 leaq 96(%rdi),%rdi 296 vaesenclast %xmm5,%xmm11,%xmm11 297 vpaddb %xmm2,%xmm0,%xmm5 298 movq %r12,120+8(%rsp) 299 leaq 96(%rsi),%rsi 300 vmovdqu 0-128(%rcx),%xmm15 301 vaesenclast %xmm6,%xmm12,%xmm12 302 vpaddb %xmm2,%xmm5,%xmm6 303 vaesenclast %xmm7,%xmm13,%xmm13 304 vpaddb %xmm2,%xmm6,%xmm7 305 vaesenclast %xmm3,%xmm14,%xmm14 306 vpaddb %xmm2,%xmm7,%xmm3 307 308 addq $0x60,%r10 309 subq $0x6,%rdx 310 jc .L6x_done 311 312 vmovups %xmm9,-96(%rsi) 313 vpxor %xmm15,%xmm1,%xmm9 314 vmovups %xmm10,-80(%rsi) 315 vmovdqa %xmm0,%xmm10 316 vmovups %xmm11,-64(%rsi) 317 vmovdqa %xmm5,%xmm11 318 vmovups %xmm12,-48(%rsi) 319 vmovdqa %xmm6,%xmm12 320 vmovups %xmm13,-32(%rsi) 321 vmovdqa %xmm7,%xmm13 322 vmovups %xmm14,-16(%rsi) 323 vmovdqa %xmm3,%xmm14 324 vmovdqu 32+8(%rsp),%xmm7 325 jmp .Loop6x 326 327.L6x_done: 328 vpxor 16+8(%rsp),%xmm8,%xmm8 329 vpxor %xmm4,%xmm8,%xmm8 330 331 .byte 0xf3,0xc3 332.cfi_endproc 333.size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x 334.globl aesni_gcm_decrypt 335.hidden aesni_gcm_decrypt 336.type aesni_gcm_decrypt,@function 337.align 32 338aesni_gcm_decrypt: 339.cfi_startproc 340 xorq %r10,%r10 341 342 343 344 cmpq $0x60,%rdx 345 jb .Lgcm_dec_abort 346 347 leaq (%rsp),%rax 348.cfi_def_cfa_register %rax 349 pushq %rbx 350.cfi_offset %rbx,-16 351 pushq %rbp 352.cfi_offset %rbp,-24 353 pushq %r12 354.cfi_offset %r12,-32 355 pushq %r13 356.cfi_offset %r13,-40 357 pushq %r14 358.cfi_offset %r14,-48 359 pushq %r15 360.cfi_offset %r15,-56 361 vzeroupper 362 363 vmovdqu (%r8),%xmm1 364 addq $-128,%rsp 365 movl 12(%r8),%ebx 366 leaq .Lbswap_mask(%rip),%r11 367 leaq -128(%rcx),%r14 368 movq $0xf80,%r15 369 vmovdqu (%r9),%xmm8 370 andq $-128,%rsp 371 vmovdqu (%r11),%xmm0 372 leaq 128(%rcx),%rcx 373 leaq 32+32(%r9),%r9 374 movl 240-128(%rcx),%ebp 375 vpshufb %xmm0,%xmm8,%xmm8 376 377 andq %r15,%r14 378 andq %rsp,%r15 379 subq %r14,%r15 380 jc .Ldec_no_key_aliasing 381 cmpq $768,%r15 382 jnc .Ldec_no_key_aliasing 383 subq %r15,%rsp 384.Ldec_no_key_aliasing: 385 386 vmovdqu 80(%rdi),%xmm7 387 leaq (%rdi),%r14 388 vmovdqu 64(%rdi),%xmm4 389 390 391 392 393 394 395 396 leaq -192(%rdi,%rdx,1),%r15 397 398 vmovdqu 48(%rdi),%xmm5 399 shrq $4,%rdx 400 xorq %r10,%r10 401 vmovdqu 32(%rdi),%xmm6 402 vpshufb %xmm0,%xmm7,%xmm7 403 vmovdqu 16(%rdi),%xmm2 404 vpshufb %xmm0,%xmm4,%xmm4 405 vmovdqu (%rdi),%xmm3 406 vpshufb %xmm0,%xmm5,%xmm5 407 vmovdqu %xmm4,48(%rsp) 408 vpshufb %xmm0,%xmm6,%xmm6 409 vmovdqu %xmm5,64(%rsp) 410 vpshufb %xmm0,%xmm2,%xmm2 411 vmovdqu %xmm6,80(%rsp) 412 vpshufb %xmm0,%xmm3,%xmm3 413 vmovdqu %xmm2,96(%rsp) 414 vmovdqu %xmm3,112(%rsp) 415 416 call _aesni_ctr32_ghash_6x 417 418 vmovups %xmm9,-96(%rsi) 419 vmovups %xmm10,-80(%rsi) 420 vmovups %xmm11,-64(%rsi) 421 vmovups %xmm12,-48(%rsi) 422 vmovups %xmm13,-32(%rsi) 423 vmovups %xmm14,-16(%rsi) 424 425 vpshufb (%r11),%xmm8,%xmm8 426 vmovdqu %xmm8,-64(%r9) 427 428 vzeroupper 429 movq -48(%rax),%r15 430.cfi_restore %r15 431 movq -40(%rax),%r14 432.cfi_restore %r14 433 movq -32(%rax),%r13 434.cfi_restore %r13 435 movq -24(%rax),%r12 436.cfi_restore %r12 437 movq -16(%rax),%rbp 438.cfi_restore %rbp 439 movq -8(%rax),%rbx 440.cfi_restore %rbx 441 leaq (%rax),%rsp 442.cfi_def_cfa_register %rsp 443.Lgcm_dec_abort: 444 movq %r10,%rax 445 .byte 0xf3,0xc3 446.cfi_endproc 447.size aesni_gcm_decrypt,.-aesni_gcm_decrypt 448.type _aesni_ctr32_6x,@function 449.align 32 450_aesni_ctr32_6x: 451.cfi_startproc 452 vmovdqu 0-128(%rcx),%xmm4 453 vmovdqu 32(%r11),%xmm2 454 leaq -1(%rbp),%r13 455 vmovups 16-128(%rcx),%xmm15 456 leaq 32-128(%rcx),%r12 457 vpxor %xmm4,%xmm1,%xmm9 458 addl $100663296,%ebx 459 jc .Lhandle_ctr32_2 460 vpaddb %xmm2,%xmm1,%xmm10 461 vpaddb %xmm2,%xmm10,%xmm11 462 vpxor %xmm4,%xmm10,%xmm10 463 vpaddb %xmm2,%xmm11,%xmm12 464 vpxor %xmm4,%xmm11,%xmm11 465 vpaddb %xmm2,%xmm12,%xmm13 466 vpxor %xmm4,%xmm12,%xmm12 467 vpaddb %xmm2,%xmm13,%xmm14 468 vpxor %xmm4,%xmm13,%xmm13 469 vpaddb %xmm2,%xmm14,%xmm1 470 vpxor %xmm4,%xmm14,%xmm14 471 jmp .Loop_ctr32 472 473.align 16 474.Loop_ctr32: 475 vaesenc %xmm15,%xmm9,%xmm9 476 vaesenc %xmm15,%xmm10,%xmm10 477 vaesenc %xmm15,%xmm11,%xmm11 478 vaesenc %xmm15,%xmm12,%xmm12 479 vaesenc %xmm15,%xmm13,%xmm13 480 vaesenc %xmm15,%xmm14,%xmm14 481 vmovups (%r12),%xmm15 482 leaq 16(%r12),%r12 483 decl %r13d 484 jnz .Loop_ctr32 485 486 vmovdqu (%r12),%xmm3 487 vaesenc %xmm15,%xmm9,%xmm9 488 vpxor 0(%rdi),%xmm3,%xmm4 489 vaesenc %xmm15,%xmm10,%xmm10 490 vpxor 16(%rdi),%xmm3,%xmm5 491 vaesenc %xmm15,%xmm11,%xmm11 492 vpxor 32(%rdi),%xmm3,%xmm6 493 vaesenc %xmm15,%xmm12,%xmm12 494 vpxor 48(%rdi),%xmm3,%xmm8 495 vaesenc %xmm15,%xmm13,%xmm13 496 vpxor 64(%rdi),%xmm3,%xmm2 497 vaesenc %xmm15,%xmm14,%xmm14 498 vpxor 80(%rdi),%xmm3,%xmm3 499 leaq 96(%rdi),%rdi 500 501 vaesenclast %xmm4,%xmm9,%xmm9 502 vaesenclast %xmm5,%xmm10,%xmm10 503 vaesenclast %xmm6,%xmm11,%xmm11 504 vaesenclast %xmm8,%xmm12,%xmm12 505 vaesenclast %xmm2,%xmm13,%xmm13 506 vaesenclast %xmm3,%xmm14,%xmm14 507 vmovups %xmm9,0(%rsi) 508 vmovups %xmm10,16(%rsi) 509 vmovups %xmm11,32(%rsi) 510 vmovups %xmm12,48(%rsi) 511 vmovups %xmm13,64(%rsi) 512 vmovups %xmm14,80(%rsi) 513 leaq 96(%rsi),%rsi 514 515 .byte 0xf3,0xc3 516.align 32 517.Lhandle_ctr32_2: 518 vpshufb %xmm0,%xmm1,%xmm6 519 vmovdqu 48(%r11),%xmm5 520 vpaddd 64(%r11),%xmm6,%xmm10 521 vpaddd %xmm5,%xmm6,%xmm11 522 vpaddd %xmm5,%xmm10,%xmm12 523 vpshufb %xmm0,%xmm10,%xmm10 524 vpaddd %xmm5,%xmm11,%xmm13 525 vpshufb %xmm0,%xmm11,%xmm11 526 vpxor %xmm4,%xmm10,%xmm10 527 vpaddd %xmm5,%xmm12,%xmm14 528 vpshufb %xmm0,%xmm12,%xmm12 529 vpxor %xmm4,%xmm11,%xmm11 530 vpaddd %xmm5,%xmm13,%xmm1 531 vpshufb %xmm0,%xmm13,%xmm13 532 vpxor %xmm4,%xmm12,%xmm12 533 vpshufb %xmm0,%xmm14,%xmm14 534 vpxor %xmm4,%xmm13,%xmm13 535 vpshufb %xmm0,%xmm1,%xmm1 536 vpxor %xmm4,%xmm14,%xmm14 537 jmp .Loop_ctr32 538.cfi_endproc 539.size _aesni_ctr32_6x,.-_aesni_ctr32_6x 540 541.globl aesni_gcm_encrypt 542.hidden aesni_gcm_encrypt 543.type aesni_gcm_encrypt,@function 544.align 32 545aesni_gcm_encrypt: 546.cfi_startproc 547 xorq %r10,%r10 548 549 550 551 552 cmpq $288,%rdx 553 jb .Lgcm_enc_abort 554 555 leaq (%rsp),%rax 556.cfi_def_cfa_register %rax 557 pushq %rbx 558.cfi_offset %rbx,-16 559 pushq %rbp 560.cfi_offset %rbp,-24 561 pushq %r12 562.cfi_offset %r12,-32 563 pushq %r13 564.cfi_offset %r13,-40 565 pushq %r14 566.cfi_offset %r14,-48 567 pushq %r15 568.cfi_offset %r15,-56 569 vzeroupper 570 571 vmovdqu (%r8),%xmm1 572 addq $-128,%rsp 573 movl 12(%r8),%ebx 574 leaq .Lbswap_mask(%rip),%r11 575 leaq -128(%rcx),%r14 576 movq $0xf80,%r15 577 leaq 128(%rcx),%rcx 578 vmovdqu (%r11),%xmm0 579 andq $-128,%rsp 580 movl 240-128(%rcx),%ebp 581 582 andq %r15,%r14 583 andq %rsp,%r15 584 subq %r14,%r15 585 jc .Lenc_no_key_aliasing 586 cmpq $768,%r15 587 jnc .Lenc_no_key_aliasing 588 subq %r15,%rsp 589.Lenc_no_key_aliasing: 590 591 leaq (%rsi),%r14 592 593 594 595 596 597 598 599 600 leaq -192(%rsi,%rdx,1),%r15 601 602 shrq $4,%rdx 603 604 call _aesni_ctr32_6x 605 vpshufb %xmm0,%xmm9,%xmm8 606 vpshufb %xmm0,%xmm10,%xmm2 607 vmovdqu %xmm8,112(%rsp) 608 vpshufb %xmm0,%xmm11,%xmm4 609 vmovdqu %xmm2,96(%rsp) 610 vpshufb %xmm0,%xmm12,%xmm5 611 vmovdqu %xmm4,80(%rsp) 612 vpshufb %xmm0,%xmm13,%xmm6 613 vmovdqu %xmm5,64(%rsp) 614 vpshufb %xmm0,%xmm14,%xmm7 615 vmovdqu %xmm6,48(%rsp) 616 617 call _aesni_ctr32_6x 618 619 vmovdqu (%r9),%xmm8 620 leaq 32+32(%r9),%r9 621 subq $12,%rdx 622 movq $192,%r10 623 vpshufb %xmm0,%xmm8,%xmm8 624 625 call _aesni_ctr32_ghash_6x 626 vmovdqu 32(%rsp),%xmm7 627 vmovdqu (%r11),%xmm0 628 vmovdqu 0-32(%r9),%xmm3 629 vpunpckhqdq %xmm7,%xmm7,%xmm1 630 vmovdqu 32-32(%r9),%xmm15 631 vmovups %xmm9,-96(%rsi) 632 vpshufb %xmm0,%xmm9,%xmm9 633 vpxor %xmm7,%xmm1,%xmm1 634 vmovups %xmm10,-80(%rsi) 635 vpshufb %xmm0,%xmm10,%xmm10 636 vmovups %xmm11,-64(%rsi) 637 vpshufb %xmm0,%xmm11,%xmm11 638 vmovups %xmm12,-48(%rsi) 639 vpshufb %xmm0,%xmm12,%xmm12 640 vmovups %xmm13,-32(%rsi) 641 vpshufb %xmm0,%xmm13,%xmm13 642 vmovups %xmm14,-16(%rsi) 643 vpshufb %xmm0,%xmm14,%xmm14 644 vmovdqu %xmm9,16(%rsp) 645 vmovdqu 48(%rsp),%xmm6 646 vmovdqu 16-32(%r9),%xmm0 647 vpunpckhqdq %xmm6,%xmm6,%xmm2 648 vpclmulqdq $0x00,%xmm3,%xmm7,%xmm5 649 vpxor %xmm6,%xmm2,%xmm2 650 vpclmulqdq $0x11,%xmm3,%xmm7,%xmm7 651 vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1 652 653 vmovdqu 64(%rsp),%xmm9 654 vpclmulqdq $0x00,%xmm0,%xmm6,%xmm4 655 vmovdqu 48-32(%r9),%xmm3 656 vpxor %xmm5,%xmm4,%xmm4 657 vpunpckhqdq %xmm9,%xmm9,%xmm5 658 vpclmulqdq $0x11,%xmm0,%xmm6,%xmm6 659 vpxor %xmm9,%xmm5,%xmm5 660 vpxor %xmm7,%xmm6,%xmm6 661 vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2 662 vmovdqu 80-32(%r9),%xmm15 663 vpxor %xmm1,%xmm2,%xmm2 664 665 vmovdqu 80(%rsp),%xmm1 666 vpclmulqdq $0x00,%xmm3,%xmm9,%xmm7 667 vmovdqu 64-32(%r9),%xmm0 668 vpxor %xmm4,%xmm7,%xmm7 669 vpunpckhqdq %xmm1,%xmm1,%xmm4 670 vpclmulqdq $0x11,%xmm3,%xmm9,%xmm9 671 vpxor %xmm1,%xmm4,%xmm4 672 vpxor %xmm6,%xmm9,%xmm9 673 vpclmulqdq $0x00,%xmm15,%xmm5,%xmm5 674 vpxor %xmm2,%xmm5,%xmm5 675 676 vmovdqu 96(%rsp),%xmm2 677 vpclmulqdq $0x00,%xmm0,%xmm1,%xmm6 678 vmovdqu 96-32(%r9),%xmm3 679 vpxor %xmm7,%xmm6,%xmm6 680 vpunpckhqdq %xmm2,%xmm2,%xmm7 681 vpclmulqdq $0x11,%xmm0,%xmm1,%xmm1 682 vpxor %xmm2,%xmm7,%xmm7 683 vpxor %xmm9,%xmm1,%xmm1 684 vpclmulqdq $0x10,%xmm15,%xmm4,%xmm4 685 vmovdqu 128-32(%r9),%xmm15 686 vpxor %xmm5,%xmm4,%xmm4 687 688 vpxor 112(%rsp),%xmm8,%xmm8 689 vpclmulqdq $0x00,%xmm3,%xmm2,%xmm5 690 vmovdqu 112-32(%r9),%xmm0 691 vpunpckhqdq %xmm8,%xmm8,%xmm9 692 vpxor %xmm6,%xmm5,%xmm5 693 vpclmulqdq $0x11,%xmm3,%xmm2,%xmm2 694 vpxor %xmm8,%xmm9,%xmm9 695 vpxor %xmm1,%xmm2,%xmm2 696 vpclmulqdq $0x00,%xmm15,%xmm7,%xmm7 697 vpxor %xmm4,%xmm7,%xmm4 698 699 vpclmulqdq $0x00,%xmm0,%xmm8,%xmm6 700 vmovdqu 0-32(%r9),%xmm3 701 vpunpckhqdq %xmm14,%xmm14,%xmm1 702 vpclmulqdq $0x11,%xmm0,%xmm8,%xmm8 703 vpxor %xmm14,%xmm1,%xmm1 704 vpxor %xmm5,%xmm6,%xmm5 705 vpclmulqdq $0x10,%xmm15,%xmm9,%xmm9 706 vmovdqu 32-32(%r9),%xmm15 707 vpxor %xmm2,%xmm8,%xmm7 708 vpxor %xmm4,%xmm9,%xmm6 709 710 vmovdqu 16-32(%r9),%xmm0 711 vpxor %xmm5,%xmm7,%xmm9 712 vpclmulqdq $0x00,%xmm3,%xmm14,%xmm4 713 vpxor %xmm9,%xmm6,%xmm6 714 vpunpckhqdq %xmm13,%xmm13,%xmm2 715 vpclmulqdq $0x11,%xmm3,%xmm14,%xmm14 716 vpxor %xmm13,%xmm2,%xmm2 717 vpslldq $8,%xmm6,%xmm9 718 vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1 719 vpxor %xmm9,%xmm5,%xmm8 720 vpsrldq $8,%xmm6,%xmm6 721 vpxor %xmm6,%xmm7,%xmm7 722 723 vpclmulqdq $0x00,%xmm0,%xmm13,%xmm5 724 vmovdqu 48-32(%r9),%xmm3 725 vpxor %xmm4,%xmm5,%xmm5 726 vpunpckhqdq %xmm12,%xmm12,%xmm9 727 vpclmulqdq $0x11,%xmm0,%xmm13,%xmm13 728 vpxor %xmm12,%xmm9,%xmm9 729 vpxor %xmm14,%xmm13,%xmm13 730 vpalignr $8,%xmm8,%xmm8,%xmm14 731 vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2 732 vmovdqu 80-32(%r9),%xmm15 733 vpxor %xmm1,%xmm2,%xmm2 734 735 vpclmulqdq $0x00,%xmm3,%xmm12,%xmm4 736 vmovdqu 64-32(%r9),%xmm0 737 vpxor %xmm5,%xmm4,%xmm4 738 vpunpckhqdq %xmm11,%xmm11,%xmm1 739 vpclmulqdq $0x11,%xmm3,%xmm12,%xmm12 740 vpxor %xmm11,%xmm1,%xmm1 741 vpxor %xmm13,%xmm12,%xmm12 742 vxorps 16(%rsp),%xmm7,%xmm7 743 vpclmulqdq $0x00,%xmm15,%xmm9,%xmm9 744 vpxor %xmm2,%xmm9,%xmm9 745 746 vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8 747 vxorps %xmm14,%xmm8,%xmm8 748 749 vpclmulqdq $0x00,%xmm0,%xmm11,%xmm5 750 vmovdqu 96-32(%r9),%xmm3 751 vpxor %xmm4,%xmm5,%xmm5 752 vpunpckhqdq %xmm10,%xmm10,%xmm2 753 vpclmulqdq $0x11,%xmm0,%xmm11,%xmm11 754 vpxor %xmm10,%xmm2,%xmm2 755 vpalignr $8,%xmm8,%xmm8,%xmm14 756 vpxor %xmm12,%xmm11,%xmm11 757 vpclmulqdq $0x10,%xmm15,%xmm1,%xmm1 758 vmovdqu 128-32(%r9),%xmm15 759 vpxor %xmm9,%xmm1,%xmm1 760 761 vxorps %xmm7,%xmm14,%xmm14 762 vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8 763 vxorps %xmm14,%xmm8,%xmm8 764 765 vpclmulqdq $0x00,%xmm3,%xmm10,%xmm4 766 vmovdqu 112-32(%r9),%xmm0 767 vpxor %xmm5,%xmm4,%xmm4 768 vpunpckhqdq %xmm8,%xmm8,%xmm9 769 vpclmulqdq $0x11,%xmm3,%xmm10,%xmm10 770 vpxor %xmm8,%xmm9,%xmm9 771 vpxor %xmm11,%xmm10,%xmm10 772 vpclmulqdq $0x00,%xmm15,%xmm2,%xmm2 773 vpxor %xmm1,%xmm2,%xmm2 774 775 vpclmulqdq $0x00,%xmm0,%xmm8,%xmm5 776 vpclmulqdq $0x11,%xmm0,%xmm8,%xmm7 777 vpxor %xmm4,%xmm5,%xmm5 778 vpclmulqdq $0x10,%xmm15,%xmm9,%xmm6 779 vpxor %xmm10,%xmm7,%xmm7 780 vpxor %xmm2,%xmm6,%xmm6 781 782 vpxor %xmm5,%xmm7,%xmm4 783 vpxor %xmm4,%xmm6,%xmm6 784 vpslldq $8,%xmm6,%xmm1 785 vmovdqu 16(%r11),%xmm3 786 vpsrldq $8,%xmm6,%xmm6 787 vpxor %xmm1,%xmm5,%xmm8 788 vpxor %xmm6,%xmm7,%xmm7 789 790 vpalignr $8,%xmm8,%xmm8,%xmm2 791 vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8 792 vpxor %xmm2,%xmm8,%xmm8 793 794 vpalignr $8,%xmm8,%xmm8,%xmm2 795 vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8 796 vpxor %xmm7,%xmm2,%xmm2 797 vpxor %xmm2,%xmm8,%xmm8 798 vpshufb (%r11),%xmm8,%xmm8 799 vmovdqu %xmm8,-64(%r9) 800 801 vzeroupper 802 movq -48(%rax),%r15 803.cfi_restore %r15 804 movq -40(%rax),%r14 805.cfi_restore %r14 806 movq -32(%rax),%r13 807.cfi_restore %r13 808 movq -24(%rax),%r12 809.cfi_restore %r12 810 movq -16(%rax),%rbp 811.cfi_restore %rbp 812 movq -8(%rax),%rbx 813.cfi_restore %rbx 814 leaq (%rax),%rsp 815.cfi_def_cfa_register %rsp 816.Lgcm_enc_abort: 817 movq %r10,%rax 818 .byte 0xf3,0xc3 819.cfi_endproc 820.size aesni_gcm_encrypt,.-aesni_gcm_encrypt 821.align 64 822.Lbswap_mask: 823.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 824.Lpoly: 825.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2 826.Lone_msb: 827.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 828.Ltwo_lsb: 829.byte 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 830.Lone_lsb: 831.byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 832.byte 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 833.align 64 834#endif 835