aesni-gcm-x86_64.S revision 305153
1/* $FreeBSD: stable/11/secure/lib/libcrypto/amd64/aesni-gcm-x86_64.S 305153 2016-08-31 20:33:59Z jkim $ */ 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 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.size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x 316.globl aesni_gcm_decrypt 317.type aesni_gcm_decrypt,@function 318.align 32 319aesni_gcm_decrypt: 320 xorq %r10,%r10 321 cmpq $0x60,%rdx 322 jb .Lgcm_dec_abort 323 324 leaq (%rsp),%rax 325 pushq %rbx 326 pushq %rbp 327 pushq %r12 328 pushq %r13 329 pushq %r14 330 pushq %r15 331 vzeroupper 332 333 vmovdqu (%r8),%xmm1 334 addq $-128,%rsp 335 movl 12(%r8),%ebx 336 leaq .Lbswap_mask(%rip),%r11 337 leaq -128(%rcx),%r14 338 movq $0xf80,%r15 339 vmovdqu (%r9),%xmm8 340 andq $-128,%rsp 341 vmovdqu (%r11),%xmm0 342 leaq 128(%rcx),%rcx 343 leaq 32+32(%r9),%r9 344 movl 240-128(%rcx),%ebp 345 vpshufb %xmm0,%xmm8,%xmm8 346 347 andq %r15,%r14 348 andq %rsp,%r15 349 subq %r14,%r15 350 jc .Ldec_no_key_aliasing 351 cmpq $768,%r15 352 jnc .Ldec_no_key_aliasing 353 subq %r15,%rsp 354.Ldec_no_key_aliasing: 355 356 vmovdqu 80(%rdi),%xmm7 357 leaq (%rdi),%r14 358 vmovdqu 64(%rdi),%xmm4 359 leaq -192(%rdi,%rdx,1),%r15 360 vmovdqu 48(%rdi),%xmm5 361 shrq $4,%rdx 362 xorq %r10,%r10 363 vmovdqu 32(%rdi),%xmm6 364 vpshufb %xmm0,%xmm7,%xmm7 365 vmovdqu 16(%rdi),%xmm2 366 vpshufb %xmm0,%xmm4,%xmm4 367 vmovdqu (%rdi),%xmm3 368 vpshufb %xmm0,%xmm5,%xmm5 369 vmovdqu %xmm4,48(%rsp) 370 vpshufb %xmm0,%xmm6,%xmm6 371 vmovdqu %xmm5,64(%rsp) 372 vpshufb %xmm0,%xmm2,%xmm2 373 vmovdqu %xmm6,80(%rsp) 374 vpshufb %xmm0,%xmm3,%xmm3 375 vmovdqu %xmm2,96(%rsp) 376 vmovdqu %xmm3,112(%rsp) 377 378 call _aesni_ctr32_ghash_6x 379 380 vmovups %xmm9,-96(%rsi) 381 vmovups %xmm10,-80(%rsi) 382 vmovups %xmm11,-64(%rsi) 383 vmovups %xmm12,-48(%rsi) 384 vmovups %xmm13,-32(%rsi) 385 vmovups %xmm14,-16(%rsi) 386 387 vpshufb (%r11),%xmm8,%xmm8 388 vmovdqu %xmm8,-64(%r9) 389 390 vzeroupper 391 movq -48(%rax),%r15 392 movq -40(%rax),%r14 393 movq -32(%rax),%r13 394 movq -24(%rax),%r12 395 movq -16(%rax),%rbp 396 movq -8(%rax),%rbx 397 leaq (%rax),%rsp 398.Lgcm_dec_abort: 399 movq %r10,%rax 400 .byte 0xf3,0xc3 401.size aesni_gcm_decrypt,.-aesni_gcm_decrypt 402.type _aesni_ctr32_6x,@function 403.align 32 404_aesni_ctr32_6x: 405 vmovdqu 0-128(%rcx),%xmm4 406 vmovdqu 32(%r11),%xmm2 407 leaq -1(%rbp),%r13 408 vmovups 16-128(%rcx),%xmm15 409 leaq 32-128(%rcx),%r12 410 vpxor %xmm4,%xmm1,%xmm9 411 addl $100663296,%ebx 412 jc .Lhandle_ctr32_2 413 vpaddb %xmm2,%xmm1,%xmm10 414 vpaddb %xmm2,%xmm10,%xmm11 415 vpxor %xmm4,%xmm10,%xmm10 416 vpaddb %xmm2,%xmm11,%xmm12 417 vpxor %xmm4,%xmm11,%xmm11 418 vpaddb %xmm2,%xmm12,%xmm13 419 vpxor %xmm4,%xmm12,%xmm12 420 vpaddb %xmm2,%xmm13,%xmm14 421 vpxor %xmm4,%xmm13,%xmm13 422 vpaddb %xmm2,%xmm14,%xmm1 423 vpxor %xmm4,%xmm14,%xmm14 424 jmp .Loop_ctr32 425 426.align 16 427.Loop_ctr32: 428 vaesenc %xmm15,%xmm9,%xmm9 429 vaesenc %xmm15,%xmm10,%xmm10 430 vaesenc %xmm15,%xmm11,%xmm11 431 vaesenc %xmm15,%xmm12,%xmm12 432 vaesenc %xmm15,%xmm13,%xmm13 433 vaesenc %xmm15,%xmm14,%xmm14 434 vmovups (%r12),%xmm15 435 leaq 16(%r12),%r12 436 decl %r13d 437 jnz .Loop_ctr32 438 439 vmovdqu (%r12),%xmm3 440 vaesenc %xmm15,%xmm9,%xmm9 441 vpxor 0(%rdi),%xmm3,%xmm4 442 vaesenc %xmm15,%xmm10,%xmm10 443 vpxor 16(%rdi),%xmm3,%xmm5 444 vaesenc %xmm15,%xmm11,%xmm11 445 vpxor 32(%rdi),%xmm3,%xmm6 446 vaesenc %xmm15,%xmm12,%xmm12 447 vpxor 48(%rdi),%xmm3,%xmm8 448 vaesenc %xmm15,%xmm13,%xmm13 449 vpxor 64(%rdi),%xmm3,%xmm2 450 vaesenc %xmm15,%xmm14,%xmm14 451 vpxor 80(%rdi),%xmm3,%xmm3 452 leaq 96(%rdi),%rdi 453 454 vaesenclast %xmm4,%xmm9,%xmm9 455 vaesenclast %xmm5,%xmm10,%xmm10 456 vaesenclast %xmm6,%xmm11,%xmm11 457 vaesenclast %xmm8,%xmm12,%xmm12 458 vaesenclast %xmm2,%xmm13,%xmm13 459 vaesenclast %xmm3,%xmm14,%xmm14 460 vmovups %xmm9,0(%rsi) 461 vmovups %xmm10,16(%rsi) 462 vmovups %xmm11,32(%rsi) 463 vmovups %xmm12,48(%rsi) 464 vmovups %xmm13,64(%rsi) 465 vmovups %xmm14,80(%rsi) 466 leaq 96(%rsi),%rsi 467 468 .byte 0xf3,0xc3 469.align 32 470.Lhandle_ctr32_2: 471 vpshufb %xmm0,%xmm1,%xmm6 472 vmovdqu 48(%r11),%xmm5 473 vpaddd 64(%r11),%xmm6,%xmm10 474 vpaddd %xmm5,%xmm6,%xmm11 475 vpaddd %xmm5,%xmm10,%xmm12 476 vpshufb %xmm0,%xmm10,%xmm10 477 vpaddd %xmm5,%xmm11,%xmm13 478 vpshufb %xmm0,%xmm11,%xmm11 479 vpxor %xmm4,%xmm10,%xmm10 480 vpaddd %xmm5,%xmm12,%xmm14 481 vpshufb %xmm0,%xmm12,%xmm12 482 vpxor %xmm4,%xmm11,%xmm11 483 vpaddd %xmm5,%xmm13,%xmm1 484 vpshufb %xmm0,%xmm13,%xmm13 485 vpxor %xmm4,%xmm12,%xmm12 486 vpshufb %xmm0,%xmm14,%xmm14 487 vpxor %xmm4,%xmm13,%xmm13 488 vpshufb %xmm0,%xmm1,%xmm1 489 vpxor %xmm4,%xmm14,%xmm14 490 jmp .Loop_ctr32 491.size _aesni_ctr32_6x,.-_aesni_ctr32_6x 492 493.globl aesni_gcm_encrypt 494.type aesni_gcm_encrypt,@function 495.align 32 496aesni_gcm_encrypt: 497 xorq %r10,%r10 498 cmpq $288,%rdx 499 jb .Lgcm_enc_abort 500 501 leaq (%rsp),%rax 502 pushq %rbx 503 pushq %rbp 504 pushq %r12 505 pushq %r13 506 pushq %r14 507 pushq %r15 508 vzeroupper 509 510 vmovdqu (%r8),%xmm1 511 addq $-128,%rsp 512 movl 12(%r8),%ebx 513 leaq .Lbswap_mask(%rip),%r11 514 leaq -128(%rcx),%r14 515 movq $0xf80,%r15 516 leaq 128(%rcx),%rcx 517 vmovdqu (%r11),%xmm0 518 andq $-128,%rsp 519 movl 240-128(%rcx),%ebp 520 521 andq %r15,%r14 522 andq %rsp,%r15 523 subq %r14,%r15 524 jc .Lenc_no_key_aliasing 525 cmpq $768,%r15 526 jnc .Lenc_no_key_aliasing 527 subq %r15,%rsp 528.Lenc_no_key_aliasing: 529 530 leaq (%rsi),%r14 531 leaq -192(%rsi,%rdx,1),%r15 532 shrq $4,%rdx 533 534 call _aesni_ctr32_6x 535 vpshufb %xmm0,%xmm9,%xmm8 536 vpshufb %xmm0,%xmm10,%xmm2 537 vmovdqu %xmm8,112(%rsp) 538 vpshufb %xmm0,%xmm11,%xmm4 539 vmovdqu %xmm2,96(%rsp) 540 vpshufb %xmm0,%xmm12,%xmm5 541 vmovdqu %xmm4,80(%rsp) 542 vpshufb %xmm0,%xmm13,%xmm6 543 vmovdqu %xmm5,64(%rsp) 544 vpshufb %xmm0,%xmm14,%xmm7 545 vmovdqu %xmm6,48(%rsp) 546 547 call _aesni_ctr32_6x 548 549 vmovdqu (%r9),%xmm8 550 leaq 32+32(%r9),%r9 551 subq $12,%rdx 552 movq $192,%r10 553 vpshufb %xmm0,%xmm8,%xmm8 554 555 call _aesni_ctr32_ghash_6x 556 vmovdqu 32(%rsp),%xmm7 557 vmovdqu (%r11),%xmm0 558 vmovdqu 0-32(%r9),%xmm3 559 vpunpckhqdq %xmm7,%xmm7,%xmm1 560 vmovdqu 32-32(%r9),%xmm15 561 vmovups %xmm9,-96(%rsi) 562 vpshufb %xmm0,%xmm9,%xmm9 563 vpxor %xmm7,%xmm1,%xmm1 564 vmovups %xmm10,-80(%rsi) 565 vpshufb %xmm0,%xmm10,%xmm10 566 vmovups %xmm11,-64(%rsi) 567 vpshufb %xmm0,%xmm11,%xmm11 568 vmovups %xmm12,-48(%rsi) 569 vpshufb %xmm0,%xmm12,%xmm12 570 vmovups %xmm13,-32(%rsi) 571 vpshufb %xmm0,%xmm13,%xmm13 572 vmovups %xmm14,-16(%rsi) 573 vpshufb %xmm0,%xmm14,%xmm14 574 vmovdqu %xmm9,16(%rsp) 575 vmovdqu 48(%rsp),%xmm6 576 vmovdqu 16-32(%r9),%xmm0 577 vpunpckhqdq %xmm6,%xmm6,%xmm2 578 vpclmulqdq $0x00,%xmm3,%xmm7,%xmm5 579 vpxor %xmm6,%xmm2,%xmm2 580 vpclmulqdq $0x11,%xmm3,%xmm7,%xmm7 581 vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1 582 583 vmovdqu 64(%rsp),%xmm9 584 vpclmulqdq $0x00,%xmm0,%xmm6,%xmm4 585 vmovdqu 48-32(%r9),%xmm3 586 vpxor %xmm5,%xmm4,%xmm4 587 vpunpckhqdq %xmm9,%xmm9,%xmm5 588 vpclmulqdq $0x11,%xmm0,%xmm6,%xmm6 589 vpxor %xmm9,%xmm5,%xmm5 590 vpxor %xmm7,%xmm6,%xmm6 591 vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2 592 vmovdqu 80-32(%r9),%xmm15 593 vpxor %xmm1,%xmm2,%xmm2 594 595 vmovdqu 80(%rsp),%xmm1 596 vpclmulqdq $0x00,%xmm3,%xmm9,%xmm7 597 vmovdqu 64-32(%r9),%xmm0 598 vpxor %xmm4,%xmm7,%xmm7 599 vpunpckhqdq %xmm1,%xmm1,%xmm4 600 vpclmulqdq $0x11,%xmm3,%xmm9,%xmm9 601 vpxor %xmm1,%xmm4,%xmm4 602 vpxor %xmm6,%xmm9,%xmm9 603 vpclmulqdq $0x00,%xmm15,%xmm5,%xmm5 604 vpxor %xmm2,%xmm5,%xmm5 605 606 vmovdqu 96(%rsp),%xmm2 607 vpclmulqdq $0x00,%xmm0,%xmm1,%xmm6 608 vmovdqu 96-32(%r9),%xmm3 609 vpxor %xmm7,%xmm6,%xmm6 610 vpunpckhqdq %xmm2,%xmm2,%xmm7 611 vpclmulqdq $0x11,%xmm0,%xmm1,%xmm1 612 vpxor %xmm2,%xmm7,%xmm7 613 vpxor %xmm9,%xmm1,%xmm1 614 vpclmulqdq $0x10,%xmm15,%xmm4,%xmm4 615 vmovdqu 128-32(%r9),%xmm15 616 vpxor %xmm5,%xmm4,%xmm4 617 618 vpxor 112(%rsp),%xmm8,%xmm8 619 vpclmulqdq $0x00,%xmm3,%xmm2,%xmm5 620 vmovdqu 112-32(%r9),%xmm0 621 vpunpckhqdq %xmm8,%xmm8,%xmm9 622 vpxor %xmm6,%xmm5,%xmm5 623 vpclmulqdq $0x11,%xmm3,%xmm2,%xmm2 624 vpxor %xmm8,%xmm9,%xmm9 625 vpxor %xmm1,%xmm2,%xmm2 626 vpclmulqdq $0x00,%xmm15,%xmm7,%xmm7 627 vpxor %xmm4,%xmm7,%xmm4 628 629 vpclmulqdq $0x00,%xmm0,%xmm8,%xmm6 630 vmovdqu 0-32(%r9),%xmm3 631 vpunpckhqdq %xmm14,%xmm14,%xmm1 632 vpclmulqdq $0x11,%xmm0,%xmm8,%xmm8 633 vpxor %xmm14,%xmm1,%xmm1 634 vpxor %xmm5,%xmm6,%xmm5 635 vpclmulqdq $0x10,%xmm15,%xmm9,%xmm9 636 vmovdqu 32-32(%r9),%xmm15 637 vpxor %xmm2,%xmm8,%xmm7 638 vpxor %xmm4,%xmm9,%xmm6 639 640 vmovdqu 16-32(%r9),%xmm0 641 vpxor %xmm5,%xmm7,%xmm9 642 vpclmulqdq $0x00,%xmm3,%xmm14,%xmm4 643 vpxor %xmm9,%xmm6,%xmm6 644 vpunpckhqdq %xmm13,%xmm13,%xmm2 645 vpclmulqdq $0x11,%xmm3,%xmm14,%xmm14 646 vpxor %xmm13,%xmm2,%xmm2 647 vpslldq $8,%xmm6,%xmm9 648 vpclmulqdq $0x00,%xmm15,%xmm1,%xmm1 649 vpxor %xmm9,%xmm5,%xmm8 650 vpsrldq $8,%xmm6,%xmm6 651 vpxor %xmm6,%xmm7,%xmm7 652 653 vpclmulqdq $0x00,%xmm0,%xmm13,%xmm5 654 vmovdqu 48-32(%r9),%xmm3 655 vpxor %xmm4,%xmm5,%xmm5 656 vpunpckhqdq %xmm12,%xmm12,%xmm9 657 vpclmulqdq $0x11,%xmm0,%xmm13,%xmm13 658 vpxor %xmm12,%xmm9,%xmm9 659 vpxor %xmm14,%xmm13,%xmm13 660 vpalignr $8,%xmm8,%xmm8,%xmm14 661 vpclmulqdq $0x10,%xmm15,%xmm2,%xmm2 662 vmovdqu 80-32(%r9),%xmm15 663 vpxor %xmm1,%xmm2,%xmm2 664 665 vpclmulqdq $0x00,%xmm3,%xmm12,%xmm4 666 vmovdqu 64-32(%r9),%xmm0 667 vpxor %xmm5,%xmm4,%xmm4 668 vpunpckhqdq %xmm11,%xmm11,%xmm1 669 vpclmulqdq $0x11,%xmm3,%xmm12,%xmm12 670 vpxor %xmm11,%xmm1,%xmm1 671 vpxor %xmm13,%xmm12,%xmm12 672 vxorps 16(%rsp),%xmm7,%xmm7 673 vpclmulqdq $0x00,%xmm15,%xmm9,%xmm9 674 vpxor %xmm2,%xmm9,%xmm9 675 676 vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8 677 vxorps %xmm14,%xmm8,%xmm8 678 679 vpclmulqdq $0x00,%xmm0,%xmm11,%xmm5 680 vmovdqu 96-32(%r9),%xmm3 681 vpxor %xmm4,%xmm5,%xmm5 682 vpunpckhqdq %xmm10,%xmm10,%xmm2 683 vpclmulqdq $0x11,%xmm0,%xmm11,%xmm11 684 vpxor %xmm10,%xmm2,%xmm2 685 vpalignr $8,%xmm8,%xmm8,%xmm14 686 vpxor %xmm12,%xmm11,%xmm11 687 vpclmulqdq $0x10,%xmm15,%xmm1,%xmm1 688 vmovdqu 128-32(%r9),%xmm15 689 vpxor %xmm9,%xmm1,%xmm1 690 691 vxorps %xmm7,%xmm14,%xmm14 692 vpclmulqdq $0x10,16(%r11),%xmm8,%xmm8 693 vxorps %xmm14,%xmm8,%xmm8 694 695 vpclmulqdq $0x00,%xmm3,%xmm10,%xmm4 696 vmovdqu 112-32(%r9),%xmm0 697 vpxor %xmm5,%xmm4,%xmm4 698 vpunpckhqdq %xmm8,%xmm8,%xmm9 699 vpclmulqdq $0x11,%xmm3,%xmm10,%xmm10 700 vpxor %xmm8,%xmm9,%xmm9 701 vpxor %xmm11,%xmm10,%xmm10 702 vpclmulqdq $0x00,%xmm15,%xmm2,%xmm2 703 vpxor %xmm1,%xmm2,%xmm2 704 705 vpclmulqdq $0x00,%xmm0,%xmm8,%xmm5 706 vpclmulqdq $0x11,%xmm0,%xmm8,%xmm7 707 vpxor %xmm4,%xmm5,%xmm5 708 vpclmulqdq $0x10,%xmm15,%xmm9,%xmm6 709 vpxor %xmm10,%xmm7,%xmm7 710 vpxor %xmm2,%xmm6,%xmm6 711 712 vpxor %xmm5,%xmm7,%xmm4 713 vpxor %xmm4,%xmm6,%xmm6 714 vpslldq $8,%xmm6,%xmm1 715 vmovdqu 16(%r11),%xmm3 716 vpsrldq $8,%xmm6,%xmm6 717 vpxor %xmm1,%xmm5,%xmm8 718 vpxor %xmm6,%xmm7,%xmm7 719 720 vpalignr $8,%xmm8,%xmm8,%xmm2 721 vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8 722 vpxor %xmm2,%xmm8,%xmm8 723 724 vpalignr $8,%xmm8,%xmm8,%xmm2 725 vpclmulqdq $0x10,%xmm3,%xmm8,%xmm8 726 vpxor %xmm7,%xmm2,%xmm2 727 vpxor %xmm2,%xmm8,%xmm8 728 vpshufb (%r11),%xmm8,%xmm8 729 vmovdqu %xmm8,-64(%r9) 730 731 vzeroupper 732 movq -48(%rax),%r15 733 movq -40(%rax),%r14 734 movq -32(%rax),%r13 735 movq -24(%rax),%r12 736 movq -16(%rax),%rbp 737 movq -8(%rax),%rbx 738 leaq (%rax),%rsp 739.Lgcm_enc_abort: 740 movq %r10,%rax 741 .byte 0xf3,0xc3 742.size aesni_gcm_encrypt,.-aesni_gcm_encrypt 743.align 64 744.Lbswap_mask: 745.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 746.Lpoly: 747.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2 748.Lone_msb: 749.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 750.Ltwo_lsb: 751.byte 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 752.Lone_lsb: 753.byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 754.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 755.align 64 756