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