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