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