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