110710Sddmitriev# $FreeBSD$ 210710Sddmitriev# Do not modify. This file is auto-generated from aesni-x86.pl. 310710Sddmitriev#ifdef PIC 410710Sddmitriev.file "aesni-x86.S" 510710Sddmitriev.text 610710Sddmitriev.globl aesni_encrypt 710710Sddmitriev.type aesni_encrypt,@function 810710Sddmitriev.align 16 910710Sddmitrievaesni_encrypt: 1010710Sddmitriev.L_aesni_encrypt_begin: 1110710Sddmitriev movl 4(%esp),%eax 1210710Sddmitriev movl 12(%esp),%edx 1310710Sddmitriev movups (%eax),%xmm2 1410710Sddmitriev movl 240(%edx),%ecx 1510710Sddmitriev movl 8(%esp),%eax 1610710Sddmitriev movups (%edx),%xmm0 1710710Sddmitriev movups 16(%edx),%xmm1 1810710Sddmitriev leal 32(%edx),%edx 1910710Sddmitriev xorps %xmm0,%xmm2 2010710Sddmitriev.L000enc1_loop_1: 2110710Sddmitriev.byte 102,15,56,220,209 2210710Sddmitriev decl %ecx 2310710Sddmitriev movups (%edx),%xmm1 2410710Sddmitriev leal 16(%edx),%edx 2510710Sddmitriev jnz .L000enc1_loop_1 2610710Sddmitriev.byte 102,15,56,221,209 2710710Sddmitriev movups %xmm2,(%eax) 2810710Sddmitriev ret 2910710Sddmitriev.size aesni_encrypt,.-.L_aesni_encrypt_begin 3010710Sddmitriev.globl aesni_decrypt 3110710Sddmitriev.type aesni_decrypt,@function 3210710Sddmitriev.align 16 3310710Sddmitrievaesni_decrypt: 3410710Sddmitriev.L_aesni_decrypt_begin: 3510710Sddmitriev movl 4(%esp),%eax 3610710Sddmitriev movl 12(%esp),%edx 3710710Sddmitriev movups (%eax),%xmm2 3810710Sddmitriev movl 240(%edx),%ecx 3910710Sddmitriev movl 8(%esp),%eax 4010710Sddmitriev movups (%edx),%xmm0 4110710Sddmitriev movups 16(%edx),%xmm1 4210710Sddmitriev leal 32(%edx),%edx 4310710Sddmitriev xorps %xmm0,%xmm2 4410710Sddmitriev.L001dec1_loop_2: 4510710Sddmitriev.byte 102,15,56,222,209 4610710Sddmitriev decl %ecx 4710710Sddmitriev movups (%edx),%xmm1 4810710Sddmitriev leal 16(%edx),%edx 4910710Sddmitriev jnz .L001dec1_loop_2 5010710Sddmitriev.byte 102,15,56,223,209 5110710Sddmitriev movups %xmm2,(%eax) 5210710Sddmitriev ret 5310710Sddmitriev.size aesni_decrypt,.-.L_aesni_decrypt_begin 5410710Sddmitriev.type _aesni_encrypt3,@function 5510710Sddmitriev.align 16 5610710Sddmitriev_aesni_encrypt3: 5710710Sddmitriev movups (%edx),%xmm0 5810710Sddmitriev shrl $1,%ecx 5910710Sddmitriev movups 16(%edx),%xmm1 6010710Sddmitriev leal 32(%edx),%edx 6110710Sddmitriev xorps %xmm0,%xmm2 6210710Sddmitriev pxor %xmm0,%xmm3 6310710Sddmitriev pxor %xmm0,%xmm4 6410710Sddmitriev movups (%edx),%xmm0 6510710Sddmitriev.L002enc3_loop: 6610710Sddmitriev.byte 102,15,56,220,209 6710710Sddmitriev.byte 102,15,56,220,217 6810710Sddmitriev decl %ecx 6910710Sddmitriev.byte 102,15,56,220,225 7010710Sddmitriev movups 16(%edx),%xmm1 7110710Sddmitriev.byte 102,15,56,220,208 7210710Sddmitriev.byte 102,15,56,220,216 7310710Sddmitriev leal 32(%edx),%edx 7410710Sddmitriev.byte 102,15,56,220,224 7510710Sddmitriev movups (%edx),%xmm0 7610710Sddmitriev jnz .L002enc3_loop 7710710Sddmitriev.byte 102,15,56,220,209 7810710Sddmitriev.byte 102,15,56,220,217 7910710Sddmitriev.byte 102,15,56,220,225 8010710Sddmitriev.byte 102,15,56,221,208 8110710Sddmitriev.byte 102,15,56,221,216 8210710Sddmitriev.byte 102,15,56,221,224 8310710Sddmitriev ret 8410710Sddmitriev.size _aesni_encrypt3,.-_aesni_encrypt3 8510710Sddmitriev.type _aesni_decrypt3,@function 8610710Sddmitriev.align 16 8710710Sddmitriev_aesni_decrypt3: 8810710Sddmitriev movups (%edx),%xmm0 8910710Sddmitriev shrl $1,%ecx 9010710Sddmitriev movups 16(%edx),%xmm1 9110710Sddmitriev leal 32(%edx),%edx 9210710Sddmitriev xorps %xmm0,%xmm2 9310710Sddmitriev pxor %xmm0,%xmm3 9410710Sddmitriev pxor %xmm0,%xmm4 9510710Sddmitriev movups (%edx),%xmm0 9610710Sddmitriev.L003dec3_loop: 9710710Sddmitriev.byte 102,15,56,222,209 9810710Sddmitriev.byte 102,15,56,222,217 9910710Sddmitriev decl %ecx 10010710Sddmitriev.byte 102,15,56,222,225 10110710Sddmitriev movups 16(%edx),%xmm1 10210710Sddmitriev.byte 102,15,56,222,208 10310710Sddmitriev.byte 102,15,56,222,216 10410710Sddmitriev leal 32(%edx),%edx 10510710Sddmitriev.byte 102,15,56,222,224 10610710Sddmitriev movups (%edx),%xmm0 10710710Sddmitriev jnz .L003dec3_loop 10810710Sddmitriev.byte 102,15,56,222,209 10910710Sddmitriev.byte 102,15,56,222,217 11010710Sddmitriev.byte 102,15,56,222,225 11110710Sddmitriev.byte 102,15,56,223,208 11210710Sddmitriev.byte 102,15,56,223,216 11310710Sddmitriev.byte 102,15,56,223,224 11410710Sddmitriev ret 11510710Sddmitriev.size _aesni_decrypt3,.-_aesni_decrypt3 11610710Sddmitriev.type _aesni_encrypt4,@function 11710710Sddmitriev.align 16 11810710Sddmitriev_aesni_encrypt4: 11910710Sddmitriev movups (%edx),%xmm0 12010710Sddmitriev movups 16(%edx),%xmm1 12110710Sddmitriev shrl $1,%ecx 12210710Sddmitriev leal 32(%edx),%edx 12310710Sddmitriev xorps %xmm0,%xmm2 12410710Sddmitriev pxor %xmm0,%xmm3 12510710Sddmitriev pxor %xmm0,%xmm4 12610710Sddmitriev pxor %xmm0,%xmm5 12710710Sddmitriev movups (%edx),%xmm0 12810710Sddmitriev.L004enc4_loop: 12910710Sddmitriev.byte 102,15,56,220,209 13010710Sddmitriev.byte 102,15,56,220,217 13110710Sddmitriev decl %ecx 13210710Sddmitriev.byte 102,15,56,220,225 13310710Sddmitriev.byte 102,15,56,220,233 13410710Sddmitriev movups 16(%edx),%xmm1 13510710Sddmitriev.byte 102,15,56,220,208 13610710Sddmitriev.byte 102,15,56,220,216 13710710Sddmitriev leal 32(%edx),%edx 13810710Sddmitriev.byte 102,15,56,220,224 13910710Sddmitriev.byte 102,15,56,220,232 14010710Sddmitriev movups (%edx),%xmm0 14110710Sddmitriev jnz .L004enc4_loop 14210710Sddmitriev.byte 102,15,56,220,209 14310710Sddmitriev.byte 102,15,56,220,217 14410710Sddmitriev.byte 102,15,56,220,225 14510710Sddmitriev.byte 102,15,56,220,233 14610710Sddmitriev.byte 102,15,56,221,208 14710710Sddmitriev.byte 102,15,56,221,216 14810710Sddmitriev.byte 102,15,56,221,224 14910710Sddmitriev.byte 102,15,56,221,232 15010710Sddmitriev ret 15110710Sddmitriev.size _aesni_encrypt4,.-_aesni_encrypt4 15210710Sddmitriev.type _aesni_decrypt4,@function 15310710Sddmitriev.align 16 15410710Sddmitriev_aesni_decrypt4: 15510710Sddmitriev movups (%edx),%xmm0 15610710Sddmitriev movups 16(%edx),%xmm1 15710710Sddmitriev shrl $1,%ecx 15810710Sddmitriev leal 32(%edx),%edx 15910710Sddmitriev xorps %xmm0,%xmm2 16010710Sddmitriev pxor %xmm0,%xmm3 16110710Sddmitriev pxor %xmm0,%xmm4 16210710Sddmitriev pxor %xmm0,%xmm5 16310710Sddmitriev movups (%edx),%xmm0 16410710Sddmitriev.L005dec4_loop: 16510710Sddmitriev.byte 102,15,56,222,209 16610710Sddmitriev.byte 102,15,56,222,217 16710710Sddmitriev decl %ecx 16810710Sddmitriev.byte 102,15,56,222,225 16910710Sddmitriev.byte 102,15,56,222,233 17010710Sddmitriev movups 16(%edx),%xmm1 17110710Sddmitriev.byte 102,15,56,222,208 17210710Sddmitriev.byte 102,15,56,222,216 17310710Sddmitriev leal 32(%edx),%edx 17410710Sddmitriev.byte 102,15,56,222,224 17510710Sddmitriev.byte 102,15,56,222,232 17610710Sddmitriev movups (%edx),%xmm0 17710710Sddmitriev jnz .L005dec4_loop 17810710Sddmitriev.byte 102,15,56,222,209 17910710Sddmitriev.byte 102,15,56,222,217 18010710Sddmitriev.byte 102,15,56,222,225 18110710Sddmitriev.byte 102,15,56,222,233 18210710Sddmitriev.byte 102,15,56,223,208 18310710Sddmitriev.byte 102,15,56,223,216 18410710Sddmitriev.byte 102,15,56,223,224 18510710Sddmitriev.byte 102,15,56,223,232 18610710Sddmitriev ret 18710710Sddmitriev.size _aesni_decrypt4,.-_aesni_decrypt4 18810710Sddmitriev.type _aesni_encrypt6,@function 18910710Sddmitriev.align 16 19010710Sddmitriev_aesni_encrypt6: 19110710Sddmitriev movups (%edx),%xmm0 19210710Sddmitriev shrl $1,%ecx 19310710Sddmitriev movups 16(%edx),%xmm1 19410710Sddmitriev leal 32(%edx),%edx 19510710Sddmitriev xorps %xmm0,%xmm2 19610710Sddmitriev pxor %xmm0,%xmm3 19710710Sddmitriev.byte 102,15,56,220,209 19810710Sddmitriev pxor %xmm0,%xmm4 19910710Sddmitriev.byte 102,15,56,220,217 20010710Sddmitriev pxor %xmm0,%xmm5 20110710Sddmitriev decl %ecx 20210710Sddmitriev.byte 102,15,56,220,225 20310710Sddmitriev pxor %xmm0,%xmm6 20410710Sddmitriev.byte 102,15,56,220,233 20510710Sddmitriev pxor %xmm0,%xmm7 20610710Sddmitriev.byte 102,15,56,220,241 20710710Sddmitriev movups (%edx),%xmm0 20810710Sddmitriev.byte 102,15,56,220,249 20910710Sddmitriev jmp .L_aesni_encrypt6_enter 21010710Sddmitriev.align 16 21110710Sddmitriev.L006enc6_loop: 21210710Sddmitriev.byte 102,15,56,220,209 21310710Sddmitriev.byte 102,15,56,220,217 21410710Sddmitriev decl %ecx 21510710Sddmitriev.byte 102,15,56,220,225 21610710Sddmitriev.byte 102,15,56,220,233 21710710Sddmitriev.byte 102,15,56,220,241 21810710Sddmitriev.byte 102,15,56,220,249 21910710Sddmitriev.align 16 22010710Sddmitriev.L_aesni_encrypt6_enter: 22110710Sddmitriev movups 16(%edx),%xmm1 22210710Sddmitriev.byte 102,15,56,220,208 22310710Sddmitriev.byte 102,15,56,220,216 22410710Sddmitriev leal 32(%edx),%edx 22510710Sddmitriev.byte 102,15,56,220,224 22610710Sddmitriev.byte 102,15,56,220,232 22710710Sddmitriev.byte 102,15,56,220,240 22810710Sddmitriev.byte 102,15,56,220,248 22910710Sddmitriev movups (%edx),%xmm0 23010710Sddmitriev jnz .L006enc6_loop 23110710Sddmitriev.byte 102,15,56,220,209 23210710Sddmitriev.byte 102,15,56,220,217 23310710Sddmitriev.byte 102,15,56,220,225 23410710Sddmitriev.byte 102,15,56,220,233 23510710Sddmitriev.byte 102,15,56,220,241 23610710Sddmitriev.byte 102,15,56,220,249 23710710Sddmitriev.byte 102,15,56,221,208 23810710Sddmitriev.byte 102,15,56,221,216 23910710Sddmitriev.byte 102,15,56,221,224 24010710Sddmitriev.byte 102,15,56,221,232 24110710Sddmitriev.byte 102,15,56,221,240 24210710Sddmitriev.byte 102,15,56,221,248 24310710Sddmitriev ret 24410710Sddmitriev.size _aesni_encrypt6,.-_aesni_encrypt6 24510710Sddmitriev.type _aesni_decrypt6,@function 24610710Sddmitriev.align 16 24710710Sddmitriev_aesni_decrypt6: 24810710Sddmitriev movups (%edx),%xmm0 24910710Sddmitriev shrl $1,%ecx 25010710Sddmitriev movups 16(%edx),%xmm1 25110710Sddmitriev leal 32(%edx),%edx 25210710Sddmitriev xorps %xmm0,%xmm2 25310710Sddmitriev pxor %xmm0,%xmm3 25410710Sddmitriev.byte 102,15,56,222,209 25510710Sddmitriev pxor %xmm0,%xmm4 25610710Sddmitriev.byte 102,15,56,222,217 25710710Sddmitriev pxor %xmm0,%xmm5 25810710Sddmitriev decl %ecx 25910710Sddmitriev.byte 102,15,56,222,225 26010710Sddmitriev pxor %xmm0,%xmm6 26110710Sddmitriev.byte 102,15,56,222,233 26210710Sddmitriev pxor %xmm0,%xmm7 26310710Sddmitriev.byte 102,15,56,222,241 26410710Sddmitriev movups (%edx),%xmm0 26510710Sddmitriev.byte 102,15,56,222,249 26610710Sddmitriev jmp .L_aesni_decrypt6_enter 26710710Sddmitriev.align 16 26810710Sddmitriev.L007dec6_loop: 26910710Sddmitriev.byte 102,15,56,222,209 27010710Sddmitriev.byte 102,15,56,222,217 27110710Sddmitriev decl %ecx 27210710Sddmitriev.byte 102,15,56,222,225 27310710Sddmitriev.byte 102,15,56,222,233 27410710Sddmitriev.byte 102,15,56,222,241 27510710Sddmitriev.byte 102,15,56,222,249 27610710Sddmitriev.align 16 27710710Sddmitriev.L_aesni_decrypt6_enter: 27810710Sddmitriev movups 16(%edx),%xmm1 27910710Sddmitriev.byte 102,15,56,222,208 28010710Sddmitriev.byte 102,15,56,222,216 28110710Sddmitriev leal 32(%edx),%edx 28210710Sddmitriev.byte 102,15,56,222,224 28310710Sddmitriev.byte 102,15,56,222,232 28410710Sddmitriev.byte 102,15,56,222,240 28510710Sddmitriev.byte 102,15,56,222,248 28610710Sddmitriev movups (%edx),%xmm0 28710710Sddmitriev jnz .L007dec6_loop 28810710Sddmitriev.byte 102,15,56,222,209 28910710Sddmitriev.byte 102,15,56,222,217 29010710Sddmitriev.byte 102,15,56,222,225 29110710Sddmitriev.byte 102,15,56,222,233 29210710Sddmitriev.byte 102,15,56,222,241 29310710Sddmitriev.byte 102,15,56,222,249 29410710Sddmitriev.byte 102,15,56,223,208 29510710Sddmitriev.byte 102,15,56,223,216 29610710Sddmitriev.byte 102,15,56,223,224 29710710Sddmitriev.byte 102,15,56,223,232 29810710Sddmitriev.byte 102,15,56,223,240 29910710Sddmitriev.byte 102,15,56,223,248 30010710Sddmitriev ret 30110710Sddmitriev.size _aesni_decrypt6,.-_aesni_decrypt6 30210710Sddmitriev.globl aesni_ecb_encrypt 30310710Sddmitriev.type aesni_ecb_encrypt,@function 30410710Sddmitriev.align 16 30510710Sddmitrievaesni_ecb_encrypt: 30610710Sddmitriev.L_aesni_ecb_encrypt_begin: 30710710Sddmitriev pushl %ebp 30810710Sddmitriev pushl %ebx 30910710Sddmitriev pushl %esi 31010710Sddmitriev pushl %edi 31110710Sddmitriev movl 20(%esp),%esi 31210710Sddmitriev movl 24(%esp),%edi 31310710Sddmitriev movl 28(%esp),%eax 31410710Sddmitriev movl 32(%esp),%edx 31510710Sddmitriev movl 36(%esp),%ebx 31610710Sddmitriev andl $-16,%eax 31710710Sddmitriev jz .L008ecb_ret 31810710Sddmitriev movl 240(%edx),%ecx 31910710Sddmitriev testl %ebx,%ebx 32010710Sddmitriev jz .L009ecb_decrypt 32110710Sddmitriev movl %edx,%ebp 32210710Sddmitriev movl %ecx,%ebx 32310710Sddmitriev cmpl $96,%eax 32410710Sddmitriev jb .L010ecb_enc_tail 32510710Sddmitriev movdqu (%esi),%xmm2 32610710Sddmitriev movdqu 16(%esi),%xmm3 32710710Sddmitriev movdqu 32(%esi),%xmm4 32810710Sddmitriev movdqu 48(%esi),%xmm5 32910710Sddmitriev movdqu 64(%esi),%xmm6 33010710Sddmitriev movdqu 80(%esi),%xmm7 33110710Sddmitriev leal 96(%esi),%esi 33210710Sddmitriev subl $96,%eax 33310710Sddmitriev jmp .L011ecb_enc_loop6_enter 33410710Sddmitriev.align 16 33510710Sddmitriev.L012ecb_enc_loop6: 33610710Sddmitriev movups %xmm2,(%edi) 33710710Sddmitriev movdqu (%esi),%xmm2 33810710Sddmitriev movups %xmm3,16(%edi) 33910710Sddmitriev movdqu 16(%esi),%xmm3 34010710Sddmitriev movups %xmm4,32(%edi) 34110710Sddmitriev movdqu 32(%esi),%xmm4 34210710Sddmitriev movups %xmm5,48(%edi) 34310710Sddmitriev movdqu 48(%esi),%xmm5 34410710Sddmitriev movups %xmm6,64(%edi) 34510710Sddmitriev movdqu 64(%esi),%xmm6 34610710Sddmitriev movups %xmm7,80(%edi) 34710710Sddmitriev leal 96(%edi),%edi 34810710Sddmitriev movdqu 80(%esi),%xmm7 34910710Sddmitriev leal 96(%esi),%esi 35010710Sddmitriev.L011ecb_enc_loop6_enter: 35110710Sddmitriev call _aesni_encrypt6 35210710Sddmitriev movl %ebp,%edx 35310710Sddmitriev movl %ebx,%ecx 35410710Sddmitriev subl $96,%eax 35510710Sddmitriev jnc .L012ecb_enc_loop6 35610710Sddmitriev movups %xmm2,(%edi) 35710710Sddmitriev movups %xmm3,16(%edi) 35810710Sddmitriev movups %xmm4,32(%edi) 35910710Sddmitriev movups %xmm5,48(%edi) 36010710Sddmitriev movups %xmm6,64(%edi) 36110710Sddmitriev movups %xmm7,80(%edi) 36210710Sddmitriev leal 96(%edi),%edi 36310710Sddmitriev addl $96,%eax 36410710Sddmitriev jz .L008ecb_ret 36510710Sddmitriev.L010ecb_enc_tail: 36610710Sddmitriev movups (%esi),%xmm2 36710710Sddmitriev cmpl $32,%eax 36810710Sddmitriev jb .L013ecb_enc_one 36910710Sddmitriev movups 16(%esi),%xmm3 37010710Sddmitriev je .L014ecb_enc_two 37110710Sddmitriev movups 32(%esi),%xmm4 37210710Sddmitriev cmpl $64,%eax 37310710Sddmitriev jb .L015ecb_enc_three 37410710Sddmitriev movups 48(%esi),%xmm5 37510710Sddmitriev je .L016ecb_enc_four 37610710Sddmitriev movups 64(%esi),%xmm6 37710710Sddmitriev xorps %xmm7,%xmm7 37810710Sddmitriev call _aesni_encrypt6 37910710Sddmitriev movups %xmm2,(%edi) 38010710Sddmitriev movups %xmm3,16(%edi) 38110710Sddmitriev movups %xmm4,32(%edi) 38210710Sddmitriev movups %xmm5,48(%edi) 38310710Sddmitriev movups %xmm6,64(%edi) 38410710Sddmitriev jmp .L008ecb_ret 38510710Sddmitriev.align 16 38610710Sddmitriev.L013ecb_enc_one: 38710710Sddmitriev movups (%edx),%xmm0 38810710Sddmitriev movups 16(%edx),%xmm1 38910710Sddmitriev leal 32(%edx),%edx 39010710Sddmitriev xorps %xmm0,%xmm2 39110710Sddmitriev.L017enc1_loop_3: 39210710Sddmitriev.byte 102,15,56,220,209 39310710Sddmitriev decl %ecx 39410710Sddmitriev movups (%edx),%xmm1 39510710Sddmitriev leal 16(%edx),%edx 39610710Sddmitriev jnz .L017enc1_loop_3 39710710Sddmitriev.byte 102,15,56,221,209 39810710Sddmitriev movups %xmm2,(%edi) 39910710Sddmitriev jmp .L008ecb_ret 40010710Sddmitriev.align 16 40110710Sddmitriev.L014ecb_enc_two: 40210710Sddmitriev xorps %xmm4,%xmm4 40310710Sddmitriev call _aesni_encrypt3 40410710Sddmitriev movups %xmm2,(%edi) 40510710Sddmitriev movups %xmm3,16(%edi) 40610710Sddmitriev jmp .L008ecb_ret 40710710Sddmitriev.align 16 40810710Sddmitriev.L015ecb_enc_three: 40910710Sddmitriev call _aesni_encrypt3 41010710Sddmitriev movups %xmm2,(%edi) 41110710Sddmitriev movups %xmm3,16(%edi) 41210710Sddmitriev movups %xmm4,32(%edi) 41310710Sddmitriev jmp .L008ecb_ret 41410710Sddmitriev.align 16 41510710Sddmitriev.L016ecb_enc_four: 41610710Sddmitriev call _aesni_encrypt4 41710710Sddmitriev movups %xmm2,(%edi) 41810710Sddmitriev movups %xmm3,16(%edi) 41910710Sddmitriev movups %xmm4,32(%edi) 42010710Sddmitriev movups %xmm5,48(%edi) 42110710Sddmitriev jmp .L008ecb_ret 42210710Sddmitriev.align 16 42310710Sddmitriev.L009ecb_decrypt: 42410710Sddmitriev movl %edx,%ebp 42510710Sddmitriev movl %ecx,%ebx 42610710Sddmitriev cmpl $96,%eax 42710710Sddmitriev jb .L018ecb_dec_tail 42810710Sddmitriev movdqu (%esi),%xmm2 42910710Sddmitriev movdqu 16(%esi),%xmm3 43010710Sddmitriev movdqu 32(%esi),%xmm4 43110710Sddmitriev movdqu 48(%esi),%xmm5 43210710Sddmitriev movdqu 64(%esi),%xmm6 43310710Sddmitriev movdqu 80(%esi),%xmm7 43410710Sddmitriev leal 96(%esi),%esi 43510710Sddmitriev subl $96,%eax 43610710Sddmitriev jmp .L019ecb_dec_loop6_enter 43710710Sddmitriev.align 16 43810710Sddmitriev.L020ecb_dec_loop6: 43910710Sddmitriev movups %xmm2,(%edi) 44010710Sddmitriev movdqu (%esi),%xmm2 44110710Sddmitriev movups %xmm3,16(%edi) 44210710Sddmitriev movdqu 16(%esi),%xmm3 44310710Sddmitriev movups %xmm4,32(%edi) 44410710Sddmitriev movdqu 32(%esi),%xmm4 44510710Sddmitriev movups %xmm5,48(%edi) 44610710Sddmitriev movdqu 48(%esi),%xmm5 44710710Sddmitriev movups %xmm6,64(%edi) 44810710Sddmitriev movdqu 64(%esi),%xmm6 44910710Sddmitriev movups %xmm7,80(%edi) 45010710Sddmitriev leal 96(%edi),%edi 45110710Sddmitriev movdqu 80(%esi),%xmm7 45210710Sddmitriev leal 96(%esi),%esi 45310710Sddmitriev.L019ecb_dec_loop6_enter: 45410710Sddmitriev call _aesni_decrypt6 45510710Sddmitriev movl %ebp,%edx 45610710Sddmitriev movl %ebx,%ecx 45710710Sddmitriev subl $96,%eax 45810710Sddmitriev jnc .L020ecb_dec_loop6 45910710Sddmitriev movups %xmm2,(%edi) 46010710Sddmitriev movups %xmm3,16(%edi) 46110710Sddmitriev movups %xmm4,32(%edi) 46210710Sddmitriev movups %xmm5,48(%edi) 46310710Sddmitriev movups %xmm6,64(%edi) 46410710Sddmitriev movups %xmm7,80(%edi) 46510710Sddmitriev leal 96(%edi),%edi 46610710Sddmitriev addl $96,%eax 46710710Sddmitriev jz .L008ecb_ret 46810710Sddmitriev.L018ecb_dec_tail: 46910710Sddmitriev movups (%esi),%xmm2 47010710Sddmitriev cmpl $32,%eax 47110710Sddmitriev jb .L021ecb_dec_one 47210710Sddmitriev movups 16(%esi),%xmm3 47310710Sddmitriev je .L022ecb_dec_two 47410710Sddmitriev movups 32(%esi),%xmm4 47510710Sddmitriev cmpl $64,%eax 47610710Sddmitriev jb .L023ecb_dec_three 47710710Sddmitriev movups 48(%esi),%xmm5 47810710Sddmitriev je .L024ecb_dec_four 47910710Sddmitriev movups 64(%esi),%xmm6 48010710Sddmitriev xorps %xmm7,%xmm7 48110710Sddmitriev call _aesni_decrypt6 48210710Sddmitriev movups %xmm2,(%edi) 48310710Sddmitriev movups %xmm3,16(%edi) 48410710Sddmitriev movups %xmm4,32(%edi) 48510710Sddmitriev movups %xmm5,48(%edi) 48610710Sddmitriev movups %xmm6,64(%edi) 48710710Sddmitriev jmp .L008ecb_ret 48810710Sddmitriev.align 16 48910710Sddmitriev.L021ecb_dec_one: 49010710Sddmitriev movups (%edx),%xmm0 49110710Sddmitriev movups 16(%edx),%xmm1 49210710Sddmitriev leal 32(%edx),%edx 49310710Sddmitriev xorps %xmm0,%xmm2 49410710Sddmitriev.L025dec1_loop_4: 49510710Sddmitriev.byte 102,15,56,222,209 49610710Sddmitriev decl %ecx 49710710Sddmitriev movups (%edx),%xmm1 49810710Sddmitriev leal 16(%edx),%edx 49910710Sddmitriev jnz .L025dec1_loop_4 50010710Sddmitriev.byte 102,15,56,223,209 50110710Sddmitriev movups %xmm2,(%edi) 50210710Sddmitriev jmp .L008ecb_ret 50310710Sddmitriev.align 16 50410710Sddmitriev.L022ecb_dec_two: 50510710Sddmitriev xorps %xmm4,%xmm4 50610710Sddmitriev call _aesni_decrypt3 50710710Sddmitriev movups %xmm2,(%edi) 50810710Sddmitriev movups %xmm3,16(%edi) 50910710Sddmitriev jmp .L008ecb_ret 51010710Sddmitriev.align 16 51110710Sddmitriev.L023ecb_dec_three: 51210710Sddmitriev call _aesni_decrypt3 51310710Sddmitriev movups %xmm2,(%edi) 51410710Sddmitriev movups %xmm3,16(%edi) 51510710Sddmitriev movups %xmm4,32(%edi) 51610710Sddmitriev jmp .L008ecb_ret 51710710Sddmitriev.align 16 51810710Sddmitriev.L024ecb_dec_four: 51910710Sddmitriev call _aesni_decrypt4 52010710Sddmitriev movups %xmm2,(%edi) 52110710Sddmitriev movups %xmm3,16(%edi) 52210710Sddmitriev movups %xmm4,32(%edi) 52310710Sddmitriev movups %xmm5,48(%edi) 52410710Sddmitriev.L008ecb_ret: 52510710Sddmitriev popl %edi 52610710Sddmitriev popl %esi 52710710Sddmitriev popl %ebx 52810710Sddmitriev popl %ebp 52910710Sddmitriev ret 53010710Sddmitriev.size aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin 53110710Sddmitriev.globl aesni_ccm64_encrypt_blocks 53210710Sddmitriev.type aesni_ccm64_encrypt_blocks,@function 53310710Sddmitriev.align 16 53410710Sddmitrievaesni_ccm64_encrypt_blocks: 53510710Sddmitriev.L_aesni_ccm64_encrypt_blocks_begin: 53610710Sddmitriev pushl %ebp 53710710Sddmitriev pushl %ebx 53810710Sddmitriev pushl %esi 53910710Sddmitriev pushl %edi 54010710Sddmitriev movl 20(%esp),%esi 54110710Sddmitriev movl 24(%esp),%edi 54210710Sddmitriev movl 28(%esp),%eax 54310710Sddmitriev movl 32(%esp),%edx 54410710Sddmitriev movl 36(%esp),%ebx 54510710Sddmitriev movl 40(%esp),%ecx 54610710Sddmitriev movl %esp,%ebp 54710710Sddmitriev subl $60,%esp 54810710Sddmitriev andl $-16,%esp 54910710Sddmitriev movl %ebp,48(%esp) 55010710Sddmitriev movdqu (%ebx),%xmm7 55110710Sddmitriev movdqu (%ecx),%xmm3 55210710Sddmitriev movl 240(%edx),%ecx 55310710Sddmitriev movl $202182159,(%esp) 55410710Sddmitriev movl $134810123,4(%esp) 55510710Sddmitriev movl $67438087,8(%esp) 55610710Sddmitriev movl $66051,12(%esp) 55710710Sddmitriev movl $1,%ebx 55810710Sddmitriev xorl %ebp,%ebp 55910710Sddmitriev movl %ebx,16(%esp) 56010710Sddmitriev movl %ebp,20(%esp) 56110710Sddmitriev movl %ebp,24(%esp) 56210710Sddmitriev movl %ebp,28(%esp) 56310710Sddmitriev shrl $1,%ecx 56410710Sddmitriev leal (%edx),%ebp 56510710Sddmitriev movdqa (%esp),%xmm5 56610710Sddmitriev movdqa %xmm7,%xmm2 56710710Sddmitriev movl %ecx,%ebx 56810710Sddmitriev.byte 102,15,56,0,253 56910710Sddmitriev.L026ccm64_enc_outer: 57010710Sddmitriev movups (%ebp),%xmm0 57110710Sddmitriev movl %ebx,%ecx 57210710Sddmitriev movups (%esi),%xmm6 57310710Sddmitriev xorps %xmm0,%xmm2 57410710Sddmitriev movups 16(%ebp),%xmm1 57510710Sddmitriev xorps %xmm6,%xmm0 57610710Sddmitriev leal 32(%ebp),%edx 57710710Sddmitriev xorps %xmm0,%xmm3 57810710Sddmitriev movups (%edx),%xmm0 57910710Sddmitriev.L027ccm64_enc2_loop: 58010710Sddmitriev.byte 102,15,56,220,209 58110710Sddmitriev decl %ecx 58210710Sddmitriev.byte 102,15,56,220,217 58310710Sddmitriev movups 16(%edx),%xmm1 58410710Sddmitriev.byte 102,15,56,220,208 58510710Sddmitriev leal 32(%edx),%edx 58610710Sddmitriev.byte 102,15,56,220,216 58710710Sddmitriev movups (%edx),%xmm0 58810710Sddmitriev jnz .L027ccm64_enc2_loop 58910710Sddmitriev.byte 102,15,56,220,209 59010710Sddmitriev.byte 102,15,56,220,217 59110710Sddmitriev paddq 16(%esp),%xmm7 59210710Sddmitriev.byte 102,15,56,221,208 59310710Sddmitriev.byte 102,15,56,221,216 59410710Sddmitriev decl %eax 59510710Sddmitriev leal 16(%esi),%esi 59610710Sddmitriev xorps %xmm2,%xmm6 59710710Sddmitriev movdqa %xmm7,%xmm2 59810710Sddmitriev movups %xmm6,(%edi) 59910710Sddmitriev leal 16(%edi),%edi 60010710Sddmitriev.byte 102,15,56,0,213 60110710Sddmitriev jnz .L026ccm64_enc_outer 60210710Sddmitriev movl 48(%esp),%esp 60310710Sddmitriev movl 40(%esp),%edi 60410710Sddmitriev movups %xmm3,(%edi) 60510710Sddmitriev popl %edi 60610710Sddmitriev popl %esi 60710710Sddmitriev popl %ebx 60810710Sddmitriev popl %ebp 60910710Sddmitriev ret 61010710Sddmitriev.size aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin 61110710Sddmitriev.globl aesni_ccm64_decrypt_blocks 61210710Sddmitriev.type aesni_ccm64_decrypt_blocks,@function 61310710Sddmitriev.align 16 61410710Sddmitrievaesni_ccm64_decrypt_blocks: 61510710Sddmitriev.L_aesni_ccm64_decrypt_blocks_begin: 61610710Sddmitriev pushl %ebp 61710710Sddmitriev pushl %ebx 61810710Sddmitriev pushl %esi 61910710Sddmitriev pushl %edi 62010710Sddmitriev movl 20(%esp),%esi 62110710Sddmitriev movl 24(%esp),%edi 62210710Sddmitriev movl 28(%esp),%eax 62310710Sddmitriev movl 32(%esp),%edx 62410710Sddmitriev movl 36(%esp),%ebx 62510710Sddmitriev movl 40(%esp),%ecx 62610710Sddmitriev movl %esp,%ebp 62710710Sddmitriev subl $60,%esp 62810710Sddmitriev andl $-16,%esp 62910710Sddmitriev movl %ebp,48(%esp) 63010710Sddmitriev movdqu (%ebx),%xmm7 63110710Sddmitriev movdqu (%ecx),%xmm3 63210710Sddmitriev movl 240(%edx),%ecx 63310710Sddmitriev movl $202182159,(%esp) 63410710Sddmitriev movl $134810123,4(%esp) 63510710Sddmitriev movl $67438087,8(%esp) 63610710Sddmitriev movl $66051,12(%esp) 63710710Sddmitriev movl $1,%ebx 63810710Sddmitriev xorl %ebp,%ebp 63910710Sddmitriev movl %ebx,16(%esp) 64010710Sddmitriev movl %ebp,20(%esp) 64110710Sddmitriev movl %ebp,24(%esp) 64210710Sddmitriev movl %ebp,28(%esp) 64310710Sddmitriev movdqa (%esp),%xmm5 64410710Sddmitriev movdqa %xmm7,%xmm2 64510710Sddmitriev movl %edx,%ebp 64610710Sddmitriev movl %ecx,%ebx 64710710Sddmitriev.byte 102,15,56,0,253 64810710Sddmitriev movups (%edx),%xmm0 64910710Sddmitriev movups 16(%edx),%xmm1 65010710Sddmitriev leal 32(%edx),%edx 65110710Sddmitriev xorps %xmm0,%xmm2 65210710Sddmitriev.L028enc1_loop_5: 65310710Sddmitriev.byte 102,15,56,220,209 65410710Sddmitriev decl %ecx 65510710Sddmitriev movups (%edx),%xmm1 65610710Sddmitriev leal 16(%edx),%edx 65710710Sddmitriev jnz .L028enc1_loop_5 65810710Sddmitriev.byte 102,15,56,221,209 65910710Sddmitriev movups (%esi),%xmm6 66010710Sddmitriev paddq 16(%esp),%xmm7 66110710Sddmitriev leal 16(%esi),%esi 66210710Sddmitriev jmp .L029ccm64_dec_outer 66310710Sddmitriev.align 16 66410710Sddmitriev.L029ccm64_dec_outer: 66510710Sddmitriev xorps %xmm2,%xmm6 66610710Sddmitriev movdqa %xmm7,%xmm2 66710710Sddmitriev movl %ebx,%ecx 66810710Sddmitriev movups %xmm6,(%edi) 66910710Sddmitriev leal 16(%edi),%edi 67010710Sddmitriev.byte 102,15,56,0,213 67110710Sddmitriev subl $1,%eax 67210710Sddmitriev jz .L030ccm64_dec_break 67310710Sddmitriev movups (%ebp),%xmm0 67410710Sddmitriev shrl $1,%ecx 67510710Sddmitriev movups 16(%ebp),%xmm1 67610710Sddmitriev xorps %xmm0,%xmm6 67710710Sddmitriev leal 32(%ebp),%edx 67810710Sddmitriev xorps %xmm0,%xmm2 67910710Sddmitriev xorps %xmm6,%xmm3 68010710Sddmitriev movups (%edx),%xmm0 68110710Sddmitriev.L031ccm64_dec2_loop: 68210710Sddmitriev.byte 102,15,56,220,209 68310710Sddmitriev decl %ecx 68410710Sddmitriev.byte 102,15,56,220,217 68510710Sddmitriev movups 16(%edx),%xmm1 68610710Sddmitriev.byte 102,15,56,220,208 68710710Sddmitriev leal 32(%edx),%edx 68810710Sddmitriev.byte 102,15,56,220,216 68910710Sddmitriev movups (%edx),%xmm0 69010710Sddmitriev jnz .L031ccm64_dec2_loop 69110710Sddmitriev movups (%esi),%xmm6 69210710Sddmitriev paddq 16(%esp),%xmm7 69310710Sddmitriev.byte 102,15,56,220,209 69410710Sddmitriev.byte 102,15,56,220,217 69510710Sddmitriev leal 16(%esi),%esi 69610710Sddmitriev.byte 102,15,56,221,208 69710710Sddmitriev.byte 102,15,56,221,216 69810710Sddmitriev jmp .L029ccm64_dec_outer 69910710Sddmitriev.align 16 70010710Sddmitriev.L030ccm64_dec_break: 70110710Sddmitriev movl %ebp,%edx 70210710Sddmitriev movups (%edx),%xmm0 70310710Sddmitriev movups 16(%edx),%xmm1 70410710Sddmitriev xorps %xmm0,%xmm6 70510710Sddmitriev leal 32(%edx),%edx 70610710Sddmitriev xorps %xmm6,%xmm3 70710710Sddmitriev.L032enc1_loop_6: 70810710Sddmitriev.byte 102,15,56,220,217 70910710Sddmitriev decl %ecx 71010710Sddmitriev movups (%edx),%xmm1 71110710Sddmitriev leal 16(%edx),%edx 71210710Sddmitriev jnz .L032enc1_loop_6 71310710Sddmitriev.byte 102,15,56,221,217 71410710Sddmitriev movl 48(%esp),%esp 71510710Sddmitriev movl 40(%esp),%edi 71610710Sddmitriev movups %xmm3,(%edi) 71710710Sddmitriev popl %edi 71810710Sddmitriev popl %esi 71910710Sddmitriev popl %ebx 72010710Sddmitriev popl %ebp 72110710Sddmitriev ret 72210710Sddmitriev.size aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin 72310710Sddmitriev.globl aesni_ctr32_encrypt_blocks 72410710Sddmitriev.type aesni_ctr32_encrypt_blocks,@function 72510710Sddmitriev.align 16 72610710Sddmitrievaesni_ctr32_encrypt_blocks: 72710710Sddmitriev.L_aesni_ctr32_encrypt_blocks_begin: 72810710Sddmitriev pushl %ebp 72910710Sddmitriev pushl %ebx 73010710Sddmitriev pushl %esi 73110710Sddmitriev pushl %edi 73210710Sddmitriev movl 20(%esp),%esi 73310710Sddmitriev movl 24(%esp),%edi 73410710Sddmitriev movl 28(%esp),%eax 73510710Sddmitriev movl 32(%esp),%edx 73610710Sddmitriev movl 36(%esp),%ebx 73710710Sddmitriev movl %esp,%ebp 73810710Sddmitriev subl $88,%esp 73910710Sddmitriev andl $-16,%esp 74010710Sddmitriev movl %ebp,80(%esp) 74110710Sddmitriev cmpl $1,%eax 74210710Sddmitriev je .L033ctr32_one_shortcut 74310710Sddmitriev movdqu (%ebx),%xmm7 74410710Sddmitriev movl $202182159,(%esp) 74510710Sddmitriev movl $134810123,4(%esp) 74610710Sddmitriev movl $67438087,8(%esp) 74710710Sddmitriev movl $66051,12(%esp) 74810710Sddmitriev movl $6,%ecx 74910710Sddmitriev xorl %ebp,%ebp 75010710Sddmitriev movl %ecx,16(%esp) 75110710Sddmitriev movl %ecx,20(%esp) 75210710Sddmitriev movl %ecx,24(%esp) 75310710Sddmitriev movl %ebp,28(%esp) 75410710Sddmitriev.byte 102,15,58,22,251,3 75510710Sddmitriev.byte 102,15,58,34,253,3 75610710Sddmitriev movl 240(%edx),%ecx 75710710Sddmitriev bswap %ebx 75810710Sddmitriev pxor %xmm1,%xmm1 75910710Sddmitriev pxor %xmm0,%xmm0 76010710Sddmitriev movdqa (%esp),%xmm2 76110710Sddmitriev.byte 102,15,58,34,203,0 76210710Sddmitriev leal 3(%ebx),%ebp 76310710Sddmitriev.byte 102,15,58,34,197,0 76410710Sddmitriev incl %ebx 76510710Sddmitriev.byte 102,15,58,34,203,1 76610710Sddmitriev incl %ebp 76710710Sddmitriev.byte 102,15,58,34,197,1 76810710Sddmitriev incl %ebx 76910710Sddmitriev.byte 102,15,58,34,203,2 77010710Sddmitriev incl %ebp 77110710Sddmitriev.byte 102,15,58,34,197,2 77210710Sddmitriev movdqa %xmm1,48(%esp) 77310710Sddmitriev.byte 102,15,56,0,202 77410710Sddmitriev movdqa %xmm0,64(%esp) 77510710Sddmitriev.byte 102,15,56,0,194 77610710Sddmitriev pshufd $192,%xmm1,%xmm2 77710710Sddmitriev pshufd $128,%xmm1,%xmm3 77810710Sddmitriev cmpl $6,%eax 77910710Sddmitriev jb .L034ctr32_tail 78010710Sddmitriev movdqa %xmm7,32(%esp) 78110710Sddmitriev shrl $1,%ecx 78210710Sddmitriev movl %edx,%ebp 78310710Sddmitriev movl %ecx,%ebx 78410710Sddmitriev subl $6,%eax 78510710Sddmitriev jmp .L035ctr32_loop6 78610710Sddmitriev.align 16 78710710Sddmitriev.L035ctr32_loop6: 78810710Sddmitriev pshufd $64,%xmm1,%xmm4 78910710Sddmitriev movdqa 32(%esp),%xmm1 79010710Sddmitriev pshufd $192,%xmm0,%xmm5 79110710Sddmitriev por %xmm1,%xmm2 79210710Sddmitriev pshufd $128,%xmm0,%xmm6 79310710Sddmitriev por %xmm1,%xmm3 79410710Sddmitriev pshufd $64,%xmm0,%xmm7 79510710Sddmitriev por %xmm1,%xmm4 79610710Sddmitriev por %xmm1,%xmm5 79710710Sddmitriev por %xmm1,%xmm6 79810710Sddmitriev por %xmm1,%xmm7 79910710Sddmitriev movups (%ebp),%xmm0 80010710Sddmitriev movups 16(%ebp),%xmm1 80110710Sddmitriev leal 32(%ebp),%edx 80210710Sddmitriev decl %ecx 80310710Sddmitriev pxor %xmm0,%xmm2 80410710Sddmitriev pxor %xmm0,%xmm3 80510710Sddmitriev.byte 102,15,56,220,209 80610710Sddmitriev pxor %xmm0,%xmm4 80710710Sddmitriev.byte 102,15,56,220,217 80810710Sddmitriev pxor %xmm0,%xmm5 80910710Sddmitriev.byte 102,15,56,220,225 81010710Sddmitriev pxor %xmm0,%xmm6 81110710Sddmitriev.byte 102,15,56,220,233 81210710Sddmitriev pxor %xmm0,%xmm7 81310710Sddmitriev.byte 102,15,56,220,241 81410710Sddmitriev movups (%edx),%xmm0 81510710Sddmitriev.byte 102,15,56,220,249 81610710Sddmitriev call .L_aesni_encrypt6_enter 81710710Sddmitriev movups (%esi),%xmm1 81810710Sddmitriev movups 16(%esi),%xmm0 81910710Sddmitriev xorps %xmm1,%xmm2 82010710Sddmitriev movups 32(%esi),%xmm1 82110710Sddmitriev xorps %xmm0,%xmm3 82210710Sddmitriev movups %xmm2,(%edi) 82310710Sddmitriev movdqa 16(%esp),%xmm0 82410710Sddmitriev xorps %xmm1,%xmm4 82510710Sddmitriev movdqa 48(%esp),%xmm1 82610710Sddmitriev movups %xmm3,16(%edi) 82710710Sddmitriev movups %xmm4,32(%edi) 82810710Sddmitriev paddd %xmm0,%xmm1 82910710Sddmitriev paddd 64(%esp),%xmm0 83010710Sddmitriev movdqa (%esp),%xmm2 83110710Sddmitriev movups 48(%esi),%xmm3 83210710Sddmitriev movups 64(%esi),%xmm4 83310710Sddmitriev xorps %xmm3,%xmm5 83410710Sddmitriev movups 80(%esi),%xmm3 83510710Sddmitriev leal 96(%esi),%esi 83610710Sddmitriev movdqa %xmm1,48(%esp) 83710710Sddmitriev.byte 102,15,56,0,202 83810710Sddmitriev xorps %xmm4,%xmm6 83910710Sddmitriev movups %xmm5,48(%edi) 84010710Sddmitriev xorps %xmm3,%xmm7 84110710Sddmitriev movdqa %xmm0,64(%esp) 84210710Sddmitriev.byte 102,15,56,0,194 84310710Sddmitriev movups %xmm6,64(%edi) 84410710Sddmitriev pshufd $192,%xmm1,%xmm2 84510710Sddmitriev movups %xmm7,80(%edi) 84610710Sddmitriev leal 96(%edi),%edi 84710710Sddmitriev movl %ebx,%ecx 84810710Sddmitriev pshufd $128,%xmm1,%xmm3 84910710Sddmitriev subl $6,%eax 85010710Sddmitriev jnc .L035ctr32_loop6 85110710Sddmitriev addl $6,%eax 85210710Sddmitriev jz .L036ctr32_ret 85310710Sddmitriev movl %ebp,%edx 85410710Sddmitriev leal 1(,%ecx,2),%ecx 85510710Sddmitriev movdqa 32(%esp),%xmm7 85610710Sddmitriev.L034ctr32_tail: 85710710Sddmitriev por %xmm7,%xmm2 85810710Sddmitriev cmpl $2,%eax 85910710Sddmitriev jb .L037ctr32_one 86010710Sddmitriev pshufd $64,%xmm1,%xmm4 86110710Sddmitriev por %xmm7,%xmm3 86210710Sddmitriev je .L038ctr32_two 86310710Sddmitriev pshufd $192,%xmm0,%xmm5 86410710Sddmitriev por %xmm7,%xmm4 86510710Sddmitriev cmpl $4,%eax 86610710Sddmitriev jb .L039ctr32_three 86710710Sddmitriev pshufd $128,%xmm0,%xmm6 86810710Sddmitriev por %xmm7,%xmm5 86910710Sddmitriev je .L040ctr32_four 87010710Sddmitriev por %xmm7,%xmm6 87110710Sddmitriev call _aesni_encrypt6 87210710Sddmitriev movups (%esi),%xmm1 87310710Sddmitriev movups 16(%esi),%xmm0 87410710Sddmitriev xorps %xmm1,%xmm2 87510710Sddmitriev movups 32(%esi),%xmm1 87610710Sddmitriev xorps %xmm0,%xmm3 87710710Sddmitriev movups 48(%esi),%xmm0 87810710Sddmitriev xorps %xmm1,%xmm4 87910710Sddmitriev movups 64(%esi),%xmm1 88010710Sddmitriev xorps %xmm0,%xmm5 88110710Sddmitriev movups %xmm2,(%edi) 88210710Sddmitriev xorps %xmm1,%xmm6 88310710Sddmitriev movups %xmm3,16(%edi) 88410710Sddmitriev movups %xmm4,32(%edi) 88510710Sddmitriev movups %xmm5,48(%edi) 88610710Sddmitriev movups %xmm6,64(%edi) 88710710Sddmitriev jmp .L036ctr32_ret 88810710Sddmitriev.align 16 88910710Sddmitriev.L033ctr32_one_shortcut: 89010710Sddmitriev movups (%ebx),%xmm2 89110710Sddmitriev movl 240(%edx),%ecx 89210710Sddmitriev.L037ctr32_one: 89310710Sddmitriev movups (%edx),%xmm0 89410710Sddmitriev movups 16(%edx),%xmm1 89510710Sddmitriev leal 32(%edx),%edx 89610710Sddmitriev xorps %xmm0,%xmm2 89710710Sddmitriev.L041enc1_loop_7: 89810710Sddmitriev.byte 102,15,56,220,209 89910710Sddmitriev decl %ecx 90010710Sddmitriev movups (%edx),%xmm1 90110710Sddmitriev leal 16(%edx),%edx 90210710Sddmitriev jnz .L041enc1_loop_7 90310710Sddmitriev.byte 102,15,56,221,209 90410710Sddmitriev movups (%esi),%xmm6 90510710Sddmitriev xorps %xmm2,%xmm6 90610710Sddmitriev movups %xmm6,(%edi) 90710710Sddmitriev jmp .L036ctr32_ret 90810710Sddmitriev.align 16 90910710Sddmitriev.L038ctr32_two: 91010710Sddmitriev call _aesni_encrypt3 91110710Sddmitriev movups (%esi),%xmm5 91210710Sddmitriev movups 16(%esi),%xmm6 91310710Sddmitriev xorps %xmm5,%xmm2 91410710Sddmitriev xorps %xmm6,%xmm3 91510710Sddmitriev movups %xmm2,(%edi) 91610710Sddmitriev movups %xmm3,16(%edi) 91710710Sddmitriev jmp .L036ctr32_ret 91810710Sddmitriev.align 16 91910710Sddmitriev.L039ctr32_three: 92010710Sddmitriev call _aesni_encrypt3 92110710Sddmitriev movups (%esi),%xmm5 92210710Sddmitriev movups 16(%esi),%xmm6 92310710Sddmitriev xorps %xmm5,%xmm2 92410710Sddmitriev movups 32(%esi),%xmm7 92510710Sddmitriev xorps %xmm6,%xmm3 92610710Sddmitriev movups %xmm2,(%edi) 92710710Sddmitriev xorps %xmm7,%xmm4 92810710Sddmitriev movups %xmm3,16(%edi) 92910710Sddmitriev movups %xmm4,32(%edi) 93010710Sddmitriev jmp .L036ctr32_ret 93110710Sddmitriev.align 16 93210710Sddmitriev.L040ctr32_four: 93310710Sddmitriev call _aesni_encrypt4 93410710Sddmitriev movups (%esi),%xmm6 93510710Sddmitriev movups 16(%esi),%xmm7 93610710Sddmitriev movups 32(%esi),%xmm1 93710710Sddmitriev xorps %xmm6,%xmm2 93810710Sddmitriev movups 48(%esi),%xmm0 93910710Sddmitriev xorps %xmm7,%xmm3 94010710Sddmitriev movups %xmm2,(%edi) 94110710Sddmitriev xorps %xmm1,%xmm4 94210710Sddmitriev movups %xmm3,16(%edi) 94310710Sddmitriev xorps %xmm0,%xmm5 94410710Sddmitriev movups %xmm4,32(%edi) 94510710Sddmitriev movups %xmm5,48(%edi) 94610710Sddmitriev.L036ctr32_ret: 94710710Sddmitriev movl 80(%esp),%esp 94810710Sddmitriev popl %edi 94910710Sddmitriev popl %esi 95010710Sddmitriev popl %ebx 95110710Sddmitriev popl %ebp 95210710Sddmitriev ret 95310710Sddmitriev.size aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin 95410710Sddmitriev.globl aesni_xts_encrypt 95510710Sddmitriev.type aesni_xts_encrypt,@function 95610710Sddmitriev.align 16 95710710Sddmitrievaesni_xts_encrypt: 95810710Sddmitriev.L_aesni_xts_encrypt_begin: 95910710Sddmitriev pushl %ebp 96010710Sddmitriev pushl %ebx 96110710Sddmitriev pushl %esi 96210710Sddmitriev pushl %edi 96310710Sddmitriev movl 36(%esp),%edx 96410710Sddmitriev movl 40(%esp),%esi 96510710Sddmitriev movl 240(%edx),%ecx 96610710Sddmitriev movups (%esi),%xmm2 96710710Sddmitriev movups (%edx),%xmm0 96810710Sddmitriev movups 16(%edx),%xmm1 96910710Sddmitriev leal 32(%edx),%edx 97010710Sddmitriev xorps %xmm0,%xmm2 97110710Sddmitriev.L042enc1_loop_8: 97210710Sddmitriev.byte 102,15,56,220,209 97310710Sddmitriev decl %ecx 97410710Sddmitriev movups (%edx),%xmm1 97510710Sddmitriev leal 16(%edx),%edx 97610710Sddmitriev jnz .L042enc1_loop_8 97710710Sddmitriev.byte 102,15,56,221,209 97810710Sddmitriev movl 20(%esp),%esi 97910710Sddmitriev movl 24(%esp),%edi 98010710Sddmitriev movl 28(%esp),%eax 98110710Sddmitriev movl 32(%esp),%edx 98210710Sddmitriev movl %esp,%ebp 98310710Sddmitriev subl $120,%esp 98410710Sddmitriev movl 240(%edx),%ecx 98510710Sddmitriev andl $-16,%esp 98610710Sddmitriev movl $135,96(%esp) 98710710Sddmitriev movl $0,100(%esp) 98810710Sddmitriev movl $1,104(%esp) 98910710Sddmitriev movl $0,108(%esp) 99010710Sddmitriev movl %eax,112(%esp) 99110710Sddmitriev movl %ebp,116(%esp) 99210710Sddmitriev movdqa %xmm2,%xmm1 99310710Sddmitriev pxor %xmm0,%xmm0 99410710Sddmitriev movdqa 96(%esp),%xmm3 99510710Sddmitriev pcmpgtd %xmm1,%xmm0 99610710Sddmitriev andl $-16,%eax 99710710Sddmitriev movl %edx,%ebp 99810710Sddmitriev movl %ecx,%ebx 99910710Sddmitriev subl $96,%eax 100010710Sddmitriev jc .L043xts_enc_short 100110710Sddmitriev shrl $1,%ecx 100210710Sddmitriev movl %ecx,%ebx 100310710Sddmitriev jmp .L044xts_enc_loop6 100410710Sddmitriev.align 16 100510710Sddmitriev.L044xts_enc_loop6: 100610710Sddmitriev pshufd $19,%xmm0,%xmm2 100710710Sddmitriev pxor %xmm0,%xmm0 100810710Sddmitriev movdqa %xmm1,(%esp) 100910710Sddmitriev paddq %xmm1,%xmm1 101010710Sddmitriev pand %xmm3,%xmm2 101110710Sddmitriev pcmpgtd %xmm1,%xmm0 101210710Sddmitriev pxor %xmm2,%xmm1 101310710Sddmitriev pshufd $19,%xmm0,%xmm2 101410710Sddmitriev pxor %xmm0,%xmm0 101510710Sddmitriev movdqa %xmm1,16(%esp) 101610710Sddmitriev paddq %xmm1,%xmm1 101710710Sddmitriev pand %xmm3,%xmm2 101810710Sddmitriev pcmpgtd %xmm1,%xmm0 101910710Sddmitriev pxor %xmm2,%xmm1 102010710Sddmitriev pshufd $19,%xmm0,%xmm2 102110710Sddmitriev pxor %xmm0,%xmm0 102210710Sddmitriev movdqa %xmm1,32(%esp) 102310710Sddmitriev paddq %xmm1,%xmm1 102410710Sddmitriev pand %xmm3,%xmm2 102510710Sddmitriev pcmpgtd %xmm1,%xmm0 102610710Sddmitriev pxor %xmm2,%xmm1 102710710Sddmitriev pshufd $19,%xmm0,%xmm2 102810710Sddmitriev pxor %xmm0,%xmm0 102910710Sddmitriev movdqa %xmm1,48(%esp) 103010710Sddmitriev paddq %xmm1,%xmm1 103110710Sddmitriev pand %xmm3,%xmm2 103210710Sddmitriev pcmpgtd %xmm1,%xmm0 103310710Sddmitriev pxor %xmm2,%xmm1 103410710Sddmitriev pshufd $19,%xmm0,%xmm7 103510710Sddmitriev movdqa %xmm1,64(%esp) 103610710Sddmitriev paddq %xmm1,%xmm1 103710710Sddmitriev movups (%ebp),%xmm0 103810710Sddmitriev pand %xmm3,%xmm7 103910710Sddmitriev movups (%esi),%xmm2 104010710Sddmitriev pxor %xmm1,%xmm7 104110710Sddmitriev movdqu 16(%esi),%xmm3 104210710Sddmitriev xorps %xmm0,%xmm2 104310710Sddmitriev movdqu 32(%esi),%xmm4 104410710Sddmitriev pxor %xmm0,%xmm3 104510710Sddmitriev movdqu 48(%esi),%xmm5 104610710Sddmitriev pxor %xmm0,%xmm4 104710710Sddmitriev movdqu 64(%esi),%xmm6 104810710Sddmitriev pxor %xmm0,%xmm5 104910710Sddmitriev movdqu 80(%esi),%xmm1 105010710Sddmitriev pxor %xmm0,%xmm6 105110710Sddmitriev leal 96(%esi),%esi 105210710Sddmitriev pxor (%esp),%xmm2 105310710Sddmitriev movdqa %xmm7,80(%esp) 105410710Sddmitriev pxor %xmm1,%xmm7 105510710Sddmitriev movups 16(%ebp),%xmm1 105610710Sddmitriev leal 32(%ebp),%edx 105710710Sddmitriev pxor 16(%esp),%xmm3 105810710Sddmitriev.byte 102,15,56,220,209 105910710Sddmitriev pxor 32(%esp),%xmm4 106010710Sddmitriev.byte 102,15,56,220,217 106110710Sddmitriev pxor 48(%esp),%xmm5 106210710Sddmitriev decl %ecx 106310710Sddmitriev.byte 102,15,56,220,225 106410710Sddmitriev pxor 64(%esp),%xmm6 106510710Sddmitriev.byte 102,15,56,220,233 106610710Sddmitriev pxor %xmm0,%xmm7 106710710Sddmitriev.byte 102,15,56,220,241 106810710Sddmitriev movups (%edx),%xmm0 106910710Sddmitriev.byte 102,15,56,220,249 107010710Sddmitriev call .L_aesni_encrypt6_enter 107110710Sddmitriev movdqa 80(%esp),%xmm1 107210710Sddmitriev pxor %xmm0,%xmm0 107310710Sddmitriev xorps (%esp),%xmm2 107410710Sddmitriev pcmpgtd %xmm1,%xmm0 107510710Sddmitriev xorps 16(%esp),%xmm3 107610710Sddmitriev movups %xmm2,(%edi) 107710710Sddmitriev xorps 32(%esp),%xmm4 107810710Sddmitriev movups %xmm3,16(%edi) 107910710Sddmitriev xorps 48(%esp),%xmm5 108010710Sddmitriev movups %xmm4,32(%edi) 108110710Sddmitriev xorps 64(%esp),%xmm6 108210710Sddmitriev movups %xmm5,48(%edi) 108310710Sddmitriev xorps %xmm1,%xmm7 108410710Sddmitriev movups %xmm6,64(%edi) 108510710Sddmitriev pshufd $19,%xmm0,%xmm2 108610710Sddmitriev movups %xmm7,80(%edi) 108710710Sddmitriev leal 96(%edi),%edi 108810710Sddmitriev movdqa 96(%esp),%xmm3 108910710Sddmitriev pxor %xmm0,%xmm0 109010710Sddmitriev paddq %xmm1,%xmm1 109110710Sddmitriev pand %xmm3,%xmm2 109210710Sddmitriev pcmpgtd %xmm1,%xmm0 109310710Sddmitriev movl %ebx,%ecx 109410710Sddmitriev pxor %xmm2,%xmm1 109510710Sddmitriev subl $96,%eax 109610710Sddmitriev jnc .L044xts_enc_loop6 109710710Sddmitriev leal 1(,%ecx,2),%ecx 109810710Sddmitriev movl %ebp,%edx 109910710Sddmitriev movl %ecx,%ebx 110010710Sddmitriev.L043xts_enc_short: 110110710Sddmitriev addl $96,%eax 110210710Sddmitriev jz .L045xts_enc_done6x 110310710Sddmitriev movdqa %xmm1,%xmm5 110410710Sddmitriev cmpl $32,%eax 110510710Sddmitriev jb .L046xts_enc_one 110610710Sddmitriev pshufd $19,%xmm0,%xmm2 110710710Sddmitriev pxor %xmm0,%xmm0 110810710Sddmitriev paddq %xmm1,%xmm1 110910710Sddmitriev pand %xmm3,%xmm2 111010710Sddmitriev pcmpgtd %xmm1,%xmm0 111110710Sddmitriev pxor %xmm2,%xmm1 111210710Sddmitriev je .L047xts_enc_two 111310710Sddmitriev pshufd $19,%xmm0,%xmm2 111410710Sddmitriev pxor %xmm0,%xmm0 111510710Sddmitriev movdqa %xmm1,%xmm6 111610710Sddmitriev paddq %xmm1,%xmm1 111710710Sddmitriev pand %xmm3,%xmm2 111810710Sddmitriev pcmpgtd %xmm1,%xmm0 111910710Sddmitriev pxor %xmm2,%xmm1 112010710Sddmitriev cmpl $64,%eax 112110710Sddmitriev jb .L048xts_enc_three 112210710Sddmitriev pshufd $19,%xmm0,%xmm2 112310710Sddmitriev pxor %xmm0,%xmm0 112410710Sddmitriev movdqa %xmm1,%xmm7 112510710Sddmitriev paddq %xmm1,%xmm1 112610710Sddmitriev pand %xmm3,%xmm2 112710710Sddmitriev pcmpgtd %xmm1,%xmm0 112810710Sddmitriev pxor %xmm2,%xmm1 112910710Sddmitriev movdqa %xmm5,(%esp) 113010710Sddmitriev movdqa %xmm6,16(%esp) 113110710Sddmitriev je .L049xts_enc_four 113210710Sddmitriev movdqa %xmm7,32(%esp) 113310710Sddmitriev pshufd $19,%xmm0,%xmm7 113410710Sddmitriev movdqa %xmm1,48(%esp) 113510710Sddmitriev paddq %xmm1,%xmm1 113610710Sddmitriev pand %xmm3,%xmm7 113710710Sddmitriev pxor %xmm1,%xmm7 113810710Sddmitriev movdqu (%esi),%xmm2 113910710Sddmitriev movdqu 16(%esi),%xmm3 114010710Sddmitriev movdqu 32(%esi),%xmm4 114110710Sddmitriev pxor (%esp),%xmm2 114210710Sddmitriev movdqu 48(%esi),%xmm5 114310710Sddmitriev pxor 16(%esp),%xmm3 114410710Sddmitriev movdqu 64(%esi),%xmm6 114510710Sddmitriev pxor 32(%esp),%xmm4 114610710Sddmitriev leal 80(%esi),%esi 114710710Sddmitriev pxor 48(%esp),%xmm5 114810710Sddmitriev movdqa %xmm7,64(%esp) 114910710Sddmitriev pxor %xmm7,%xmm6 115010710Sddmitriev call _aesni_encrypt6 115110710Sddmitriev movaps 64(%esp),%xmm1 115210710Sddmitriev xorps (%esp),%xmm2 115310710Sddmitriev xorps 16(%esp),%xmm3 115410710Sddmitriev xorps 32(%esp),%xmm4 115510710Sddmitriev movups %xmm2,(%edi) 115610710Sddmitriev xorps 48(%esp),%xmm5 115710710Sddmitriev movups %xmm3,16(%edi) 115810710Sddmitriev xorps %xmm1,%xmm6 115910710Sddmitriev movups %xmm4,32(%edi) 116010710Sddmitriev movups %xmm5,48(%edi) 116110710Sddmitriev movups %xmm6,64(%edi) 116210710Sddmitriev leal 80(%edi),%edi 116310710Sddmitriev jmp .L050xts_enc_done 116410710Sddmitriev.align 16 116510710Sddmitriev.L046xts_enc_one: 116610710Sddmitriev movups (%esi),%xmm2 116710710Sddmitriev leal 16(%esi),%esi 116810710Sddmitriev xorps %xmm5,%xmm2 116910710Sddmitriev movups (%edx),%xmm0 117010710Sddmitriev movups 16(%edx),%xmm1 117110710Sddmitriev leal 32(%edx),%edx 117210710Sddmitriev xorps %xmm0,%xmm2 117310710Sddmitriev.L051enc1_loop_9: 117410710Sddmitriev.byte 102,15,56,220,209 117510710Sddmitriev decl %ecx 117610710Sddmitriev movups (%edx),%xmm1 117710710Sddmitriev leal 16(%edx),%edx 117810710Sddmitriev jnz .L051enc1_loop_9 117910710Sddmitriev.byte 102,15,56,221,209 118010710Sddmitriev xorps %xmm5,%xmm2 118110710Sddmitriev movups %xmm2,(%edi) 118210710Sddmitriev leal 16(%edi),%edi 118310710Sddmitriev movdqa %xmm5,%xmm1 118410710Sddmitriev jmp .L050xts_enc_done 118510710Sddmitriev.align 16 118610710Sddmitriev.L047xts_enc_two: 118710710Sddmitriev movaps %xmm1,%xmm6 118810710Sddmitriev movups (%esi),%xmm2 118910710Sddmitriev movups 16(%esi),%xmm3 119010710Sddmitriev leal 32(%esi),%esi 119110710Sddmitriev xorps %xmm5,%xmm2 119210710Sddmitriev xorps %xmm6,%xmm3 119310710Sddmitriev xorps %xmm4,%xmm4 119410710Sddmitriev call _aesni_encrypt3 119510710Sddmitriev xorps %xmm5,%xmm2 119610710Sddmitriev xorps %xmm6,%xmm3 119710710Sddmitriev movups %xmm2,(%edi) 119810710Sddmitriev movups %xmm3,16(%edi) 119910710Sddmitriev leal 32(%edi),%edi 120010710Sddmitriev movdqa %xmm6,%xmm1 120110710Sddmitriev jmp .L050xts_enc_done 120210710Sddmitriev.align 16 120310710Sddmitriev.L048xts_enc_three: 120410710Sddmitriev movaps %xmm1,%xmm7 120510710Sddmitriev movups (%esi),%xmm2 120610710Sddmitriev movups 16(%esi),%xmm3 120710710Sddmitriev movups 32(%esi),%xmm4 120810710Sddmitriev leal 48(%esi),%esi 120910710Sddmitriev xorps %xmm5,%xmm2 121010710Sddmitriev xorps %xmm6,%xmm3 121110710Sddmitriev xorps %xmm7,%xmm4 121210710Sddmitriev call _aesni_encrypt3 121310710Sddmitriev xorps %xmm5,%xmm2 121410710Sddmitriev xorps %xmm6,%xmm3 121510710Sddmitriev xorps %xmm7,%xmm4 121610710Sddmitriev movups %xmm2,(%edi) 121710710Sddmitriev movups %xmm3,16(%edi) 121810710Sddmitriev movups %xmm4,32(%edi) 121910710Sddmitriev leal 48(%edi),%edi 122010710Sddmitriev movdqa %xmm7,%xmm1 122110710Sddmitriev jmp .L050xts_enc_done 122210710Sddmitriev.align 16 122310710Sddmitriev.L049xts_enc_four: 122410710Sddmitriev movaps %xmm1,%xmm6 122510710Sddmitriev movups (%esi),%xmm2 122610710Sddmitriev movups 16(%esi),%xmm3 122710710Sddmitriev movups 32(%esi),%xmm4 122810710Sddmitriev xorps (%esp),%xmm2 122910710Sddmitriev movups 48(%esi),%xmm5 123010710Sddmitriev leal 64(%esi),%esi 123110710Sddmitriev xorps 16(%esp),%xmm3 123210710Sddmitriev xorps %xmm7,%xmm4 123310710Sddmitriev xorps %xmm6,%xmm5 123410710Sddmitriev call _aesni_encrypt4 123510710Sddmitriev xorps (%esp),%xmm2 123610710Sddmitriev xorps 16(%esp),%xmm3 123710710Sddmitriev xorps %xmm7,%xmm4 123810710Sddmitriev movups %xmm2,(%edi) 123910710Sddmitriev xorps %xmm6,%xmm5 124010710Sddmitriev movups %xmm3,16(%edi) 124110710Sddmitriev movups %xmm4,32(%edi) 124210710Sddmitriev movups %xmm5,48(%edi) 124310710Sddmitriev leal 64(%edi),%edi 124410710Sddmitriev movdqa %xmm6,%xmm1 124510710Sddmitriev jmp .L050xts_enc_done 124610710Sddmitriev.align 16 124710710Sddmitriev.L045xts_enc_done6x: 124810710Sddmitriev movl 112(%esp),%eax 124910710Sddmitriev andl $15,%eax 125010710Sddmitriev jz .L052xts_enc_ret 125110710Sddmitriev movdqa %xmm1,%xmm5 125210710Sddmitriev movl %eax,112(%esp) 125310710Sddmitriev jmp .L053xts_enc_steal 125410710Sddmitriev.align 16 125510710Sddmitriev.L050xts_enc_done: 125610710Sddmitriev movl 112(%esp),%eax 125710710Sddmitriev pxor %xmm0,%xmm0 125810710Sddmitriev andl $15,%eax 125910710Sddmitriev jz .L052xts_enc_ret 126010710Sddmitriev pcmpgtd %xmm1,%xmm0 126110710Sddmitriev movl %eax,112(%esp) 126210710Sddmitriev pshufd $19,%xmm0,%xmm5 126310710Sddmitriev paddq %xmm1,%xmm1 126410710Sddmitriev pand 96(%esp),%xmm5 126510710Sddmitriev pxor %xmm1,%xmm5 126610710Sddmitriev.L053xts_enc_steal: 126710710Sddmitriev movzbl (%esi),%ecx 126810710Sddmitriev movzbl -16(%edi),%edx 126910710Sddmitriev leal 1(%esi),%esi 127010710Sddmitriev movb %cl,-16(%edi) 127110710Sddmitriev movb %dl,(%edi) 127210710Sddmitriev leal 1(%edi),%edi 127310710Sddmitriev subl $1,%eax 127410710Sddmitriev jnz .L053xts_enc_steal 127510710Sddmitriev subl 112(%esp),%edi 127610710Sddmitriev movl %ebp,%edx 127710710Sddmitriev movl %ebx,%ecx 127810710Sddmitriev movups -16(%edi),%xmm2 127910710Sddmitriev xorps %xmm5,%xmm2 128010710Sddmitriev movups (%edx),%xmm0 128110710Sddmitriev movups 16(%edx),%xmm1 128210710Sddmitriev leal 32(%edx),%edx 128310710Sddmitriev xorps %xmm0,%xmm2 128410710Sddmitriev.L054enc1_loop_10: 128510710Sddmitriev.byte 102,15,56,220,209 128610710Sddmitriev decl %ecx 128710710Sddmitriev movups (%edx),%xmm1 128810710Sddmitriev leal 16(%edx),%edx 128910710Sddmitriev jnz .L054enc1_loop_10 129010710Sddmitriev.byte 102,15,56,221,209 129110710Sddmitriev xorps %xmm5,%xmm2 129210710Sddmitriev movups %xmm2,-16(%edi) 129310710Sddmitriev.L052xts_enc_ret: 129410710Sddmitriev movl 116(%esp),%esp 129510710Sddmitriev popl %edi 129610710Sddmitriev popl %esi 129710710Sddmitriev popl %ebx 129810710Sddmitriev popl %ebp 129910710Sddmitriev ret 130010710Sddmitriev.size aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin 130110710Sddmitriev.globl aesni_xts_decrypt 130210710Sddmitriev.type aesni_xts_decrypt,@function 130310710Sddmitriev.align 16 130410710Sddmitrievaesni_xts_decrypt: 130510710Sddmitriev.L_aesni_xts_decrypt_begin: 130610710Sddmitriev pushl %ebp 130710710Sddmitriev pushl %ebx 130810710Sddmitriev pushl %esi 130910710Sddmitriev pushl %edi 131010710Sddmitriev movl 36(%esp),%edx 131110710Sddmitriev movl 40(%esp),%esi 131210710Sddmitriev movl 240(%edx),%ecx 131310710Sddmitriev movups (%esi),%xmm2 131410710Sddmitriev movups (%edx),%xmm0 131510710Sddmitriev movups 16(%edx),%xmm1 131610710Sddmitriev leal 32(%edx),%edx 131710710Sddmitriev xorps %xmm0,%xmm2 131810710Sddmitriev.L055enc1_loop_11: 131910710Sddmitriev.byte 102,15,56,220,209 132010710Sddmitriev decl %ecx 132110710Sddmitriev movups (%edx),%xmm1 132210710Sddmitriev leal 16(%edx),%edx 132310710Sddmitriev jnz .L055enc1_loop_11 132410710Sddmitriev.byte 102,15,56,221,209 132510710Sddmitriev movl 20(%esp),%esi 132610710Sddmitriev movl 24(%esp),%edi 132710710Sddmitriev movl 28(%esp),%eax 132810710Sddmitriev movl 32(%esp),%edx 132910710Sddmitriev movl %esp,%ebp 133010710Sddmitriev subl $120,%esp 133110710Sddmitriev andl $-16,%esp 133210710Sddmitriev xorl %ebx,%ebx 133310710Sddmitriev testl $15,%eax 133410710Sddmitriev setnz %bl 133510710Sddmitriev shll $4,%ebx 133610710Sddmitriev subl %ebx,%eax 133710710Sddmitriev movl $135,96(%esp) 133810710Sddmitriev movl $0,100(%esp) 133910710Sddmitriev movl $1,104(%esp) 134010710Sddmitriev movl $0,108(%esp) 134110710Sddmitriev movl %eax,112(%esp) 134210710Sddmitriev movl %ebp,116(%esp) 134310710Sddmitriev movl 240(%edx),%ecx 134410710Sddmitriev movl %edx,%ebp 134510710Sddmitriev movl %ecx,%ebx 134610710Sddmitriev movdqa %xmm2,%xmm1 134710710Sddmitriev pxor %xmm0,%xmm0 134810710Sddmitriev movdqa 96(%esp),%xmm3 134910710Sddmitriev pcmpgtd %xmm1,%xmm0 135010710Sddmitriev andl $-16,%eax 135110710Sddmitriev subl $96,%eax 135210710Sddmitriev jc .L056xts_dec_short 135310710Sddmitriev shrl $1,%ecx 135410710Sddmitriev movl %ecx,%ebx 135510710Sddmitriev jmp .L057xts_dec_loop6 135610710Sddmitriev.align 16 135710710Sddmitriev.L057xts_dec_loop6: 135810710Sddmitriev pshufd $19,%xmm0,%xmm2 135910710Sddmitriev pxor %xmm0,%xmm0 136010710Sddmitriev movdqa %xmm1,(%esp) 136110710Sddmitriev paddq %xmm1,%xmm1 136210710Sddmitriev pand %xmm3,%xmm2 136310710Sddmitriev pcmpgtd %xmm1,%xmm0 136410710Sddmitriev pxor %xmm2,%xmm1 136510710Sddmitriev pshufd $19,%xmm0,%xmm2 136610710Sddmitriev pxor %xmm0,%xmm0 136710710Sddmitriev movdqa %xmm1,16(%esp) 136810710Sddmitriev paddq %xmm1,%xmm1 136910710Sddmitriev pand %xmm3,%xmm2 137010710Sddmitriev pcmpgtd %xmm1,%xmm0 137110710Sddmitriev pxor %xmm2,%xmm1 137210710Sddmitriev pshufd $19,%xmm0,%xmm2 137310710Sddmitriev pxor %xmm0,%xmm0 137410710Sddmitriev movdqa %xmm1,32(%esp) 137510710Sddmitriev paddq %xmm1,%xmm1 137610710Sddmitriev pand %xmm3,%xmm2 137710710Sddmitriev pcmpgtd %xmm1,%xmm0 137810710Sddmitriev pxor %xmm2,%xmm1 137910710Sddmitriev pshufd $19,%xmm0,%xmm2 138010710Sddmitriev pxor %xmm0,%xmm0 138110710Sddmitriev movdqa %xmm1,48(%esp) 138210710Sddmitriev paddq %xmm1,%xmm1 138310710Sddmitriev pand %xmm3,%xmm2 138410710Sddmitriev pcmpgtd %xmm1,%xmm0 138510710Sddmitriev pxor %xmm2,%xmm1 138610710Sddmitriev pshufd $19,%xmm0,%xmm7 138710710Sddmitriev movdqa %xmm1,64(%esp) 138810710Sddmitriev paddq %xmm1,%xmm1 138910710Sddmitriev movups (%ebp),%xmm0 139010710Sddmitriev pand %xmm3,%xmm7 139110710Sddmitriev movups (%esi),%xmm2 139210710Sddmitriev pxor %xmm1,%xmm7 139310710Sddmitriev movdqu 16(%esi),%xmm3 139410710Sddmitriev xorps %xmm0,%xmm2 139510710Sddmitriev movdqu 32(%esi),%xmm4 139610710Sddmitriev pxor %xmm0,%xmm3 139710710Sddmitriev movdqu 48(%esi),%xmm5 139810710Sddmitriev pxor %xmm0,%xmm4 139910710Sddmitriev movdqu 64(%esi),%xmm6 140010710Sddmitriev pxor %xmm0,%xmm5 140110710Sddmitriev movdqu 80(%esi),%xmm1 140210710Sddmitriev pxor %xmm0,%xmm6 140310710Sddmitriev leal 96(%esi),%esi 140410710Sddmitriev pxor (%esp),%xmm2 140510710Sddmitriev movdqa %xmm7,80(%esp) 140610710Sddmitriev pxor %xmm1,%xmm7 140710710Sddmitriev movups 16(%ebp),%xmm1 140810710Sddmitriev leal 32(%ebp),%edx 140910710Sddmitriev pxor 16(%esp),%xmm3 141010710Sddmitriev.byte 102,15,56,222,209 141110710Sddmitriev pxor 32(%esp),%xmm4 141210710Sddmitriev.byte 102,15,56,222,217 141310710Sddmitriev pxor 48(%esp),%xmm5 141410710Sddmitriev decl %ecx 141510710Sddmitriev.byte 102,15,56,222,225 141610710Sddmitriev pxor 64(%esp),%xmm6 141710710Sddmitriev.byte 102,15,56,222,233 141810710Sddmitriev pxor %xmm0,%xmm7 141910710Sddmitriev.byte 102,15,56,222,241 142010710Sddmitriev movups (%edx),%xmm0 142110710Sddmitriev.byte 102,15,56,222,249 142210710Sddmitriev call .L_aesni_decrypt6_enter 142310710Sddmitriev movdqa 80(%esp),%xmm1 142410710Sddmitriev pxor %xmm0,%xmm0 142510710Sddmitriev xorps (%esp),%xmm2 142610710Sddmitriev pcmpgtd %xmm1,%xmm0 142710710Sddmitriev xorps 16(%esp),%xmm3 142810710Sddmitriev movups %xmm2,(%edi) 142910710Sddmitriev xorps 32(%esp),%xmm4 143010710Sddmitriev movups %xmm3,16(%edi) 143110710Sddmitriev xorps 48(%esp),%xmm5 143210710Sddmitriev movups %xmm4,32(%edi) 143310710Sddmitriev xorps 64(%esp),%xmm6 143410710Sddmitriev movups %xmm5,48(%edi) 143510710Sddmitriev xorps %xmm1,%xmm7 143610710Sddmitriev movups %xmm6,64(%edi) 143710710Sddmitriev pshufd $19,%xmm0,%xmm2 143810710Sddmitriev movups %xmm7,80(%edi) 143910710Sddmitriev leal 96(%edi),%edi 144010710Sddmitriev movdqa 96(%esp),%xmm3 144110710Sddmitriev pxor %xmm0,%xmm0 144210710Sddmitriev paddq %xmm1,%xmm1 144310710Sddmitriev pand %xmm3,%xmm2 144410710Sddmitriev pcmpgtd %xmm1,%xmm0 144510710Sddmitriev movl %ebx,%ecx 144610710Sddmitriev pxor %xmm2,%xmm1 144710710Sddmitriev subl $96,%eax 144810710Sddmitriev jnc .L057xts_dec_loop6 144910710Sddmitriev leal 1(,%ecx,2),%ecx 145010710Sddmitriev movl %ebp,%edx 145110710Sddmitriev movl %ecx,%ebx 145210710Sddmitriev.L056xts_dec_short: 145310710Sddmitriev addl $96,%eax 145410710Sddmitriev jz .L058xts_dec_done6x 145510710Sddmitriev movdqa %xmm1,%xmm5 145610710Sddmitriev cmpl $32,%eax 145710710Sddmitriev jb .L059xts_dec_one 145810710Sddmitriev pshufd $19,%xmm0,%xmm2 145910710Sddmitriev pxor %xmm0,%xmm0 146010710Sddmitriev paddq %xmm1,%xmm1 146110710Sddmitriev pand %xmm3,%xmm2 146210710Sddmitriev pcmpgtd %xmm1,%xmm0 146310710Sddmitriev pxor %xmm2,%xmm1 146410710Sddmitriev je .L060xts_dec_two 146510710Sddmitriev pshufd $19,%xmm0,%xmm2 146610710Sddmitriev pxor %xmm0,%xmm0 146710710Sddmitriev movdqa %xmm1,%xmm6 146810710Sddmitriev paddq %xmm1,%xmm1 146910710Sddmitriev pand %xmm3,%xmm2 147010710Sddmitriev pcmpgtd %xmm1,%xmm0 147110710Sddmitriev pxor %xmm2,%xmm1 147210710Sddmitriev cmpl $64,%eax 147310710Sddmitriev jb .L061xts_dec_three 147410710Sddmitriev pshufd $19,%xmm0,%xmm2 147510710Sddmitriev pxor %xmm0,%xmm0 147610710Sddmitriev movdqa %xmm1,%xmm7 147710710Sddmitriev paddq %xmm1,%xmm1 147810710Sddmitriev pand %xmm3,%xmm2 147910710Sddmitriev pcmpgtd %xmm1,%xmm0 148010710Sddmitriev pxor %xmm2,%xmm1 148110710Sddmitriev movdqa %xmm5,(%esp) 148210710Sddmitriev movdqa %xmm6,16(%esp) 148310710Sddmitriev je .L062xts_dec_four 148410710Sddmitriev movdqa %xmm7,32(%esp) 148510710Sddmitriev pshufd $19,%xmm0,%xmm7 148610710Sddmitriev movdqa %xmm1,48(%esp) 148710710Sddmitriev paddq %xmm1,%xmm1 148810710Sddmitriev pand %xmm3,%xmm7 148910710Sddmitriev pxor %xmm1,%xmm7 149010710Sddmitriev movdqu (%esi),%xmm2 149110710Sddmitriev movdqu 16(%esi),%xmm3 149210710Sddmitriev movdqu 32(%esi),%xmm4 149310710Sddmitriev pxor (%esp),%xmm2 149410710Sddmitriev movdqu 48(%esi),%xmm5 149510710Sddmitriev pxor 16(%esp),%xmm3 149610710Sddmitriev movdqu 64(%esi),%xmm6 149710710Sddmitriev pxor 32(%esp),%xmm4 149810710Sddmitriev leal 80(%esi),%esi 149910710Sddmitriev pxor 48(%esp),%xmm5 150010710Sddmitriev movdqa %xmm7,64(%esp) 150110710Sddmitriev pxor %xmm7,%xmm6 150210710Sddmitriev call _aesni_decrypt6 150310710Sddmitriev movaps 64(%esp),%xmm1 150410710Sddmitriev xorps (%esp),%xmm2 150510710Sddmitriev xorps 16(%esp),%xmm3 150610710Sddmitriev xorps 32(%esp),%xmm4 150710710Sddmitriev movups %xmm2,(%edi) 150810710Sddmitriev xorps 48(%esp),%xmm5 150910710Sddmitriev movups %xmm3,16(%edi) 151010710Sddmitriev xorps %xmm1,%xmm6 151110710Sddmitriev movups %xmm4,32(%edi) 151210710Sddmitriev movups %xmm5,48(%edi) 151310710Sddmitriev movups %xmm6,64(%edi) 151410710Sddmitriev leal 80(%edi),%edi 151510710Sddmitriev jmp .L063xts_dec_done 151610710Sddmitriev.align 16 151710710Sddmitriev.L059xts_dec_one: 151810710Sddmitriev movups (%esi),%xmm2 151910710Sddmitriev leal 16(%esi),%esi 152010710Sddmitriev xorps %xmm5,%xmm2 152110710Sddmitriev movups (%edx),%xmm0 152210710Sddmitriev movups 16(%edx),%xmm1 152310710Sddmitriev leal 32(%edx),%edx 152410710Sddmitriev xorps %xmm0,%xmm2 152510710Sddmitriev.L064dec1_loop_12: 152610710Sddmitriev.byte 102,15,56,222,209 152710710Sddmitriev decl %ecx 152810710Sddmitriev movups (%edx),%xmm1 152910710Sddmitriev leal 16(%edx),%edx 153010710Sddmitriev jnz .L064dec1_loop_12 153110710Sddmitriev.byte 102,15,56,223,209 153210710Sddmitriev xorps %xmm5,%xmm2 153310710Sddmitriev movups %xmm2,(%edi) 153410710Sddmitriev leal 16(%edi),%edi 153510710Sddmitriev movdqa %xmm5,%xmm1 153610710Sddmitriev jmp .L063xts_dec_done 153710710Sddmitriev.align 16 153810710Sddmitriev.L060xts_dec_two: 153910710Sddmitriev movaps %xmm1,%xmm6 154010710Sddmitriev movups (%esi),%xmm2 154110710Sddmitriev movups 16(%esi),%xmm3 154210710Sddmitriev leal 32(%esi),%esi 154310710Sddmitriev xorps %xmm5,%xmm2 154410710Sddmitriev xorps %xmm6,%xmm3 154510710Sddmitriev call _aesni_decrypt3 154610710Sddmitriev xorps %xmm5,%xmm2 154710710Sddmitriev xorps %xmm6,%xmm3 154810710Sddmitriev movups %xmm2,(%edi) 154910710Sddmitriev movups %xmm3,16(%edi) 155010710Sddmitriev leal 32(%edi),%edi 155110710Sddmitriev movdqa %xmm6,%xmm1 155210710Sddmitriev jmp .L063xts_dec_done 155310710Sddmitriev.align 16 155410710Sddmitriev.L061xts_dec_three: 155510710Sddmitriev movaps %xmm1,%xmm7 155610710Sddmitriev movups (%esi),%xmm2 155710710Sddmitriev movups 16(%esi),%xmm3 155810710Sddmitriev movups 32(%esi),%xmm4 155910710Sddmitriev leal 48(%esi),%esi 156010710Sddmitriev xorps %xmm5,%xmm2 156110710Sddmitriev xorps %xmm6,%xmm3 156210710Sddmitriev xorps %xmm7,%xmm4 156310710Sddmitriev call _aesni_decrypt3 156410710Sddmitriev xorps %xmm5,%xmm2 156510710Sddmitriev xorps %xmm6,%xmm3 156610710Sddmitriev xorps %xmm7,%xmm4 156710710Sddmitriev movups %xmm2,(%edi) 156810710Sddmitriev movups %xmm3,16(%edi) 156910710Sddmitriev movups %xmm4,32(%edi) 157010710Sddmitriev leal 48(%edi),%edi 157110710Sddmitriev movdqa %xmm7,%xmm1 157210710Sddmitriev jmp .L063xts_dec_done 157310710Sddmitriev.align 16 157410710Sddmitriev.L062xts_dec_four: 157510710Sddmitriev movaps %xmm1,%xmm6 157610710Sddmitriev movups (%esi),%xmm2 157710710Sddmitriev movups 16(%esi),%xmm3 157810710Sddmitriev movups 32(%esi),%xmm4 157910710Sddmitriev xorps (%esp),%xmm2 158010710Sddmitriev movups 48(%esi),%xmm5 158110710Sddmitriev leal 64(%esi),%esi 158210710Sddmitriev xorps 16(%esp),%xmm3 158310710Sddmitriev xorps %xmm7,%xmm4 158410710Sddmitriev xorps %xmm6,%xmm5 158510710Sddmitriev call _aesni_decrypt4 158610710Sddmitriev xorps (%esp),%xmm2 158710710Sddmitriev xorps 16(%esp),%xmm3 158810710Sddmitriev xorps %xmm7,%xmm4 158910710Sddmitriev movups %xmm2,(%edi) 159010710Sddmitriev xorps %xmm6,%xmm5 159110710Sddmitriev movups %xmm3,16(%edi) 159210710Sddmitriev movups %xmm4,32(%edi) 159310710Sddmitriev movups %xmm5,48(%edi) 159410710Sddmitriev leal 64(%edi),%edi 159510710Sddmitriev movdqa %xmm6,%xmm1 159610710Sddmitriev jmp .L063xts_dec_done 159710710Sddmitriev.align 16 159810710Sddmitriev.L058xts_dec_done6x: 159910710Sddmitriev movl 112(%esp),%eax 160010710Sddmitriev andl $15,%eax 160110710Sddmitriev jz .L065xts_dec_ret 160210710Sddmitriev movl %eax,112(%esp) 160310710Sddmitriev jmp .L066xts_dec_only_one_more 160410710Sddmitriev.align 16 160510710Sddmitriev.L063xts_dec_done: 160610710Sddmitriev movl 112(%esp),%eax 160710710Sddmitriev pxor %xmm0,%xmm0 160810710Sddmitriev andl $15,%eax 160910710Sddmitriev jz .L065xts_dec_ret 161010710Sddmitriev pcmpgtd %xmm1,%xmm0 161110710Sddmitriev movl %eax,112(%esp) 161210710Sddmitriev pshufd $19,%xmm0,%xmm2 161310710Sddmitriev pxor %xmm0,%xmm0 161410710Sddmitriev movdqa 96(%esp),%xmm3 161510710Sddmitriev paddq %xmm1,%xmm1 161610710Sddmitriev pand %xmm3,%xmm2 161710710Sddmitriev pcmpgtd %xmm1,%xmm0 161810710Sddmitriev pxor %xmm2,%xmm1 161910710Sddmitriev.L066xts_dec_only_one_more: 162010710Sddmitriev pshufd $19,%xmm0,%xmm5 162110710Sddmitriev movdqa %xmm1,%xmm6 162210710Sddmitriev paddq %xmm1,%xmm1 162310710Sddmitriev pand %xmm3,%xmm5 162410710Sddmitriev pxor %xmm1,%xmm5 162510710Sddmitriev movl %ebp,%edx 162610710Sddmitriev movl %ebx,%ecx 162710710Sddmitriev movups (%esi),%xmm2 162810710Sddmitriev xorps %xmm5,%xmm2 162910710Sddmitriev movups (%edx),%xmm0 163010710Sddmitriev movups 16(%edx),%xmm1 163110710Sddmitriev leal 32(%edx),%edx 163210710Sddmitriev xorps %xmm0,%xmm2 163310710Sddmitriev.L067dec1_loop_13: 163410710Sddmitriev.byte 102,15,56,222,209 163510710Sddmitriev decl %ecx 163610710Sddmitriev movups (%edx),%xmm1 163710710Sddmitriev leal 16(%edx),%edx 163810710Sddmitriev jnz .L067dec1_loop_13 163910710Sddmitriev.byte 102,15,56,223,209 164010710Sddmitriev xorps %xmm5,%xmm2 164110710Sddmitriev movups %xmm2,(%edi) 164210710Sddmitriev.L068xts_dec_steal: 164310710Sddmitriev movzbl 16(%esi),%ecx 164410710Sddmitriev movzbl (%edi),%edx 164510710Sddmitriev leal 1(%esi),%esi 164610710Sddmitriev movb %cl,(%edi) 164710710Sddmitriev movb %dl,16(%edi) 164810710Sddmitriev leal 1(%edi),%edi 164910710Sddmitriev subl $1,%eax 165010710Sddmitriev jnz .L068xts_dec_steal 165110710Sddmitriev subl 112(%esp),%edi 165210710Sddmitriev movl %ebp,%edx 165310710Sddmitriev movl %ebx,%ecx 165410710Sddmitriev movups (%edi),%xmm2 165510710Sddmitriev xorps %xmm6,%xmm2 165610710Sddmitriev movups (%edx),%xmm0 165710710Sddmitriev movups 16(%edx),%xmm1 165810710Sddmitriev leal 32(%edx),%edx 165910710Sddmitriev xorps %xmm0,%xmm2 166010710Sddmitriev.L069dec1_loop_14: 166110710Sddmitriev.byte 102,15,56,222,209 166210710Sddmitriev decl %ecx 166310710Sddmitriev movups (%edx),%xmm1 166410710Sddmitriev leal 16(%edx),%edx 166510710Sddmitriev jnz .L069dec1_loop_14 166610710Sddmitriev.byte 102,15,56,223,209 166710710Sddmitriev xorps %xmm6,%xmm2 166810710Sddmitriev movups %xmm2,(%edi) 166910710Sddmitriev.L065xts_dec_ret: 167010710Sddmitriev movl 116(%esp),%esp 167110710Sddmitriev popl %edi 167210710Sddmitriev popl %esi 167310710Sddmitriev popl %ebx 167410710Sddmitriev popl %ebp 167510710Sddmitriev ret 167610710Sddmitriev.size aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin 167710710Sddmitriev.globl aesni_cbc_encrypt 167810710Sddmitriev.type aesni_cbc_encrypt,@function 167910710Sddmitriev.align 16 168010710Sddmitrievaesni_cbc_encrypt: 168110710Sddmitriev.L_aesni_cbc_encrypt_begin: 168210710Sddmitriev pushl %ebp 168310710Sddmitriev pushl %ebx 168410710Sddmitriev pushl %esi 168510710Sddmitriev pushl %edi 168610710Sddmitriev movl 20(%esp),%esi 168710710Sddmitriev movl %esp,%ebx 168810710Sddmitriev movl 24(%esp),%edi 168910710Sddmitriev subl $24,%ebx 169010710Sddmitriev movl 28(%esp),%eax 169110710Sddmitriev andl $-16,%ebx 169210710Sddmitriev movl 32(%esp),%edx 169310710Sddmitriev movl 36(%esp),%ebp 169410710Sddmitriev testl %eax,%eax 169510710Sddmitriev jz .L070cbc_abort 169610710Sddmitriev cmpl $0,40(%esp) 169710710Sddmitriev xchgl %esp,%ebx 169810710Sddmitriev movups (%ebp),%xmm7 169910710Sddmitriev movl 240(%edx),%ecx 170010710Sddmitriev movl %edx,%ebp 170110710Sddmitriev movl %ebx,16(%esp) 170210710Sddmitriev movl %ecx,%ebx 170310710Sddmitriev je .L071cbc_decrypt 170410710Sddmitriev movaps %xmm7,%xmm2 170510710Sddmitriev cmpl $16,%eax 170610710Sddmitriev jb .L072cbc_enc_tail 170710710Sddmitriev subl $16,%eax 170810710Sddmitriev jmp .L073cbc_enc_loop 170910710Sddmitriev.align 16 171010710Sddmitriev.L073cbc_enc_loop: 171110710Sddmitriev movups (%esi),%xmm7 171210710Sddmitriev leal 16(%esi),%esi 171310710Sddmitriev movups (%edx),%xmm0 171410710Sddmitriev movups 16(%edx),%xmm1 171510710Sddmitriev xorps %xmm0,%xmm7 171610710Sddmitriev leal 32(%edx),%edx 171710710Sddmitriev xorps %xmm7,%xmm2 171810710Sddmitriev.L074enc1_loop_15: 171910710Sddmitriev.byte 102,15,56,220,209 172010710Sddmitriev decl %ecx 172110710Sddmitriev movups (%edx),%xmm1 172210710Sddmitriev leal 16(%edx),%edx 172310710Sddmitriev jnz .L074enc1_loop_15 172410710Sddmitriev.byte 102,15,56,221,209 172510710Sddmitriev movl %ebx,%ecx 172610710Sddmitriev movl %ebp,%edx 172710710Sddmitriev movups %xmm2,(%edi) 172810710Sddmitriev leal 16(%edi),%edi 172910710Sddmitriev subl $16,%eax 173010710Sddmitriev jnc .L073cbc_enc_loop 173110710Sddmitriev addl $16,%eax 173210710Sddmitriev jnz .L072cbc_enc_tail 173310710Sddmitriev movaps %xmm2,%xmm7 173410710Sddmitriev jmp .L075cbc_ret 173510710Sddmitriev.L072cbc_enc_tail: 173610710Sddmitriev movl %eax,%ecx 173710710Sddmitriev.long 2767451785 173810710Sddmitriev movl $16,%ecx 173910710Sddmitriev subl %eax,%ecx 174010710Sddmitriev xorl %eax,%eax 174110710Sddmitriev.long 2868115081 174210710Sddmitriev leal -16(%edi),%edi 174310710Sddmitriev movl %ebx,%ecx 174410710Sddmitriev movl %edi,%esi 174510710Sddmitriev movl %ebp,%edx 174610710Sddmitriev jmp .L073cbc_enc_loop 174710710Sddmitriev.align 16 174810710Sddmitriev.L071cbc_decrypt: 174910710Sddmitriev cmpl $80,%eax 175010710Sddmitriev jbe .L076cbc_dec_tail 175110710Sddmitriev movaps %xmm7,(%esp) 175210710Sddmitriev subl $80,%eax 175310710Sddmitriev jmp .L077cbc_dec_loop6_enter 175410710Sddmitriev.align 16 175510710Sddmitriev.L078cbc_dec_loop6: 175610710Sddmitriev movaps %xmm0,(%esp) 175710710Sddmitriev movups %xmm7,(%edi) 175810710Sddmitriev leal 16(%edi),%edi 175910710Sddmitriev.L077cbc_dec_loop6_enter: 176010710Sddmitriev movdqu (%esi),%xmm2 176110710Sddmitriev movdqu 16(%esi),%xmm3 176210710Sddmitriev movdqu 32(%esi),%xmm4 176310710Sddmitriev movdqu 48(%esi),%xmm5 176410710Sddmitriev movdqu 64(%esi),%xmm6 176510710Sddmitriev movdqu 80(%esi),%xmm7 176610710Sddmitriev call _aesni_decrypt6 176710710Sddmitriev movups (%esi),%xmm1 176810710Sddmitriev movups 16(%esi),%xmm0 176910710Sddmitriev xorps (%esp),%xmm2 177010710Sddmitriev xorps %xmm1,%xmm3 177110710Sddmitriev movups 32(%esi),%xmm1 177210710Sddmitriev xorps %xmm0,%xmm4 177310710Sddmitriev movups 48(%esi),%xmm0 177410710Sddmitriev xorps %xmm1,%xmm5 177510710Sddmitriev movups 64(%esi),%xmm1 177610710Sddmitriev xorps %xmm0,%xmm6 177710710Sddmitriev movups 80(%esi),%xmm0 177810710Sddmitriev xorps %xmm1,%xmm7 177910710Sddmitriev movups %xmm2,(%edi) 178010710Sddmitriev movups %xmm3,16(%edi) 178110710Sddmitriev leal 96(%esi),%esi 178210710Sddmitriev movups %xmm4,32(%edi) 178310710Sddmitriev movl %ebx,%ecx 178410710Sddmitriev movups %xmm5,48(%edi) 178510710Sddmitriev movl %ebp,%edx 178610710Sddmitriev movups %xmm6,64(%edi) 178710710Sddmitriev leal 80(%edi),%edi 178810710Sddmitriev subl $96,%eax 178910710Sddmitriev ja .L078cbc_dec_loop6 179010710Sddmitriev movaps %xmm7,%xmm2 179110710Sddmitriev movaps %xmm0,%xmm7 179210710Sddmitriev addl $80,%eax 179310710Sddmitriev jle .L079cbc_dec_tail_collected 179410710Sddmitriev movups %xmm2,(%edi) 179510710Sddmitriev leal 16(%edi),%edi 179610710Sddmitriev.L076cbc_dec_tail: 179710710Sddmitriev movups (%esi),%xmm2 179810710Sddmitriev movaps %xmm2,%xmm6 179910710Sddmitriev cmpl $16,%eax 180010710Sddmitriev jbe .L080cbc_dec_one 180110710Sddmitriev movups 16(%esi),%xmm3 180210710Sddmitriev movaps %xmm3,%xmm5 180310710Sddmitriev cmpl $32,%eax 180410710Sddmitriev jbe .L081cbc_dec_two 180510710Sddmitriev movups 32(%esi),%xmm4 180610710Sddmitriev cmpl $48,%eax 180710710Sddmitriev jbe .L082cbc_dec_three 180810710Sddmitriev movups 48(%esi),%xmm5 180910710Sddmitriev cmpl $64,%eax 181010710Sddmitriev jbe .L083cbc_dec_four 181110710Sddmitriev movups 64(%esi),%xmm6 181210710Sddmitriev movaps %xmm7,(%esp) 181310710Sddmitriev movups (%esi),%xmm2 181410710Sddmitriev xorps %xmm7,%xmm7 181510710Sddmitriev call _aesni_decrypt6 181610710Sddmitriev movups (%esi),%xmm1 181710710Sddmitriev movups 16(%esi),%xmm0 181810710Sddmitriev xorps (%esp),%xmm2 181910710Sddmitriev xorps %xmm1,%xmm3 182010710Sddmitriev movups 32(%esi),%xmm1 182110710Sddmitriev xorps %xmm0,%xmm4 182210710Sddmitriev movups 48(%esi),%xmm0 182310710Sddmitriev xorps %xmm1,%xmm5 182410710Sddmitriev movups 64(%esi),%xmm7 182510710Sddmitriev xorps %xmm0,%xmm6 182610710Sddmitriev movups %xmm2,(%edi) 182710710Sddmitriev movups %xmm3,16(%edi) 182810710Sddmitriev movups %xmm4,32(%edi) 182910710Sddmitriev movups %xmm5,48(%edi) 183010710Sddmitriev leal 64(%edi),%edi 183110710Sddmitriev movaps %xmm6,%xmm2 183210710Sddmitriev subl $80,%eax 183310710Sddmitriev jmp .L079cbc_dec_tail_collected 183410710Sddmitriev.align 16 183510710Sddmitriev.L080cbc_dec_one: 183610710Sddmitriev movups (%edx),%xmm0 183710710Sddmitriev movups 16(%edx),%xmm1 183810710Sddmitriev leal 32(%edx),%edx 183910710Sddmitriev xorps %xmm0,%xmm2 184010710Sddmitriev.L084dec1_loop_16: 184110710Sddmitriev.byte 102,15,56,222,209 184210710Sddmitriev decl %ecx 184310710Sddmitriev movups (%edx),%xmm1 184410710Sddmitriev leal 16(%edx),%edx 184510710Sddmitriev jnz .L084dec1_loop_16 184610710Sddmitriev.byte 102,15,56,223,209 184710710Sddmitriev xorps %xmm7,%xmm2 184810710Sddmitriev movaps %xmm6,%xmm7 184910710Sddmitriev subl $16,%eax 185010710Sddmitriev jmp .L079cbc_dec_tail_collected 185110710Sddmitriev.align 16 185210710Sddmitriev.L081cbc_dec_two: 185310710Sddmitriev xorps %xmm4,%xmm4 185410710Sddmitriev call _aesni_decrypt3 185510710Sddmitriev xorps %xmm7,%xmm2 185610710Sddmitriev xorps %xmm6,%xmm3 185710710Sddmitriev movups %xmm2,(%edi) 185810710Sddmitriev movaps %xmm3,%xmm2 185910710Sddmitriev leal 16(%edi),%edi 186010710Sddmitriev movaps %xmm5,%xmm7 186110710Sddmitriev subl $32,%eax 186210710Sddmitriev jmp .L079cbc_dec_tail_collected 186310710Sddmitriev.align 16 186410710Sddmitriev.L082cbc_dec_three: 186510710Sddmitriev call _aesni_decrypt3 186610710Sddmitriev xorps %xmm7,%xmm2 186710710Sddmitriev xorps %xmm6,%xmm3 186810710Sddmitriev xorps %xmm5,%xmm4 186910710Sddmitriev movups %xmm2,(%edi) 187010710Sddmitriev movaps %xmm4,%xmm2 187110710Sddmitriev movups %xmm3,16(%edi) 187210710Sddmitriev leal 32(%edi),%edi 187310710Sddmitriev movups 32(%esi),%xmm7 187410710Sddmitriev subl $48,%eax 187510710Sddmitriev jmp .L079cbc_dec_tail_collected 187610710Sddmitriev.align 16 187710710Sddmitriev.L083cbc_dec_four: 187810710Sddmitriev call _aesni_decrypt4 187910710Sddmitriev movups 16(%esi),%xmm1 188010710Sddmitriev movups 32(%esi),%xmm0 188110710Sddmitriev xorps %xmm7,%xmm2 188210710Sddmitriev movups 48(%esi),%xmm7 188310710Sddmitriev xorps %xmm6,%xmm3 188410710Sddmitriev movups %xmm2,(%edi) 188510710Sddmitriev xorps %xmm1,%xmm4 188610710Sddmitriev movups %xmm3,16(%edi) 188710710Sddmitriev xorps %xmm0,%xmm5 188810710Sddmitriev movups %xmm4,32(%edi) 188910710Sddmitriev leal 48(%edi),%edi 189010710Sddmitriev movaps %xmm5,%xmm2 189110710Sddmitriev subl $64,%eax 189210710Sddmitriev.L079cbc_dec_tail_collected: 189310710Sddmitriev andl $15,%eax 189410710Sddmitriev jnz .L085cbc_dec_tail_partial 189510710Sddmitriev movups %xmm2,(%edi) 189610710Sddmitriev jmp .L075cbc_ret 189710710Sddmitriev.align 16 189810710Sddmitriev.L085cbc_dec_tail_partial: 189910710Sddmitriev movaps %xmm2,(%esp) 190010710Sddmitriev movl $16,%ecx 190110710Sddmitriev movl %esp,%esi 190210710Sddmitriev subl %eax,%ecx 190310710Sddmitriev.long 2767451785 190410710Sddmitriev.L075cbc_ret: 190510710Sddmitriev movl 16(%esp),%esp 190610710Sddmitriev movl 36(%esp),%ebp 190710710Sddmitriev movups %xmm7,(%ebp) 190810710Sddmitriev.L070cbc_abort: 190910710Sddmitriev popl %edi 191010710Sddmitriev popl %esi 191110710Sddmitriev popl %ebx 191210710Sddmitriev popl %ebp 191310710Sddmitriev ret 191410710Sddmitriev.size aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin 191510710Sddmitriev.type _aesni_set_encrypt_key,@function 191610710Sddmitriev.align 16 191710710Sddmitriev_aesni_set_encrypt_key: 191810710Sddmitriev testl %eax,%eax 191910710Sddmitriev jz .L086bad_pointer 192010710Sddmitriev testl %edx,%edx 192110710Sddmitriev jz .L086bad_pointer 192210710Sddmitriev movups (%eax),%xmm0 192310710Sddmitriev xorps %xmm4,%xmm4 192410710Sddmitriev leal 16(%edx),%edx 192510710Sddmitriev cmpl $256,%ecx 192610710Sddmitriev je .L08714rounds 192710710Sddmitriev cmpl $192,%ecx 192810710Sddmitriev je .L08812rounds 192910710Sddmitriev cmpl $128,%ecx 193010710Sddmitriev jne .L089bad_keybits 193110710Sddmitriev.align 16 193210710Sddmitriev.L09010rounds: 193310710Sddmitriev movl $9,%ecx 193410710Sddmitriev movups %xmm0,-16(%edx) 193510710Sddmitriev.byte 102,15,58,223,200,1 193610710Sddmitriev call .L091key_128_cold 193710710Sddmitriev.byte 102,15,58,223,200,2 193810710Sddmitriev call .L092key_128 193910710Sddmitriev.byte 102,15,58,223,200,4 194010710Sddmitriev call .L092key_128 194110710Sddmitriev.byte 102,15,58,223,200,8 194210710Sddmitriev call .L092key_128 194310710Sddmitriev.byte 102,15,58,223,200,16 194410710Sddmitriev call .L092key_128 194510710Sddmitriev.byte 102,15,58,223,200,32 194610710Sddmitriev call .L092key_128 194710710Sddmitriev.byte 102,15,58,223,200,64 194810710Sddmitriev call .L092key_128 194910710Sddmitriev.byte 102,15,58,223,200,128 195010710Sddmitriev call .L092key_128 195110710Sddmitriev.byte 102,15,58,223,200,27 195210710Sddmitriev call .L092key_128 195310710Sddmitriev.byte 102,15,58,223,200,54 195410710Sddmitriev call .L092key_128 195510710Sddmitriev movups %xmm0,(%edx) 195610710Sddmitriev movl %ecx,80(%edx) 195710710Sddmitriev xorl %eax,%eax 195810710Sddmitriev ret 195910710Sddmitriev.align 16 196010710Sddmitriev.L092key_128: 196110710Sddmitriev movups %xmm0,(%edx) 196210710Sddmitriev leal 16(%edx),%edx 196310710Sddmitriev.L091key_128_cold: 196410710Sddmitriev shufps $16,%xmm0,%xmm4 196510710Sddmitriev xorps %xmm4,%xmm0 196610710Sddmitriev shufps $140,%xmm0,%xmm4 196710710Sddmitriev xorps %xmm4,%xmm0 196810710Sddmitriev shufps $255,%xmm1,%xmm1 196910710Sddmitriev xorps %xmm1,%xmm0 197010710Sddmitriev ret 197110710Sddmitriev.align 16 197210710Sddmitriev.L08812rounds: 197310710Sddmitriev movq 16(%eax),%xmm2 197410710Sddmitriev movl $11,%ecx 197510710Sddmitriev movups %xmm0,-16(%edx) 197610710Sddmitriev.byte 102,15,58,223,202,1 197710710Sddmitriev call .L093key_192a_cold 197810710Sddmitriev.byte 102,15,58,223,202,2 197910710Sddmitriev call .L094key_192b 198010710Sddmitriev.byte 102,15,58,223,202,4 198110710Sddmitriev call .L095key_192a 198210710Sddmitriev.byte 102,15,58,223,202,8 198310710Sddmitriev call .L094key_192b 198410710Sddmitriev.byte 102,15,58,223,202,16 198510710Sddmitriev call .L095key_192a 198610710Sddmitriev.byte 102,15,58,223,202,32 198710710Sddmitriev call .L094key_192b 198810710Sddmitriev.byte 102,15,58,223,202,64 198910710Sddmitriev call .L095key_192a 199010710Sddmitriev.byte 102,15,58,223,202,128 199110710Sddmitriev call .L094key_192b 199210710Sddmitriev movups %xmm0,(%edx) 199310710Sddmitriev movl %ecx,48(%edx) 199410710Sddmitriev xorl %eax,%eax 199510710Sddmitriev ret 199610710Sddmitriev.align 16 199710710Sddmitriev.L095key_192a: 199810710Sddmitriev movups %xmm0,(%edx) 199910710Sddmitriev leal 16(%edx),%edx 200010710Sddmitriev.align 16 200110710Sddmitriev.L093key_192a_cold: 200210710Sddmitriev movaps %xmm2,%xmm5 200310710Sddmitriev.L096key_192b_warm: 200410710Sddmitriev shufps $16,%xmm0,%xmm4 200510710Sddmitriev movdqa %xmm2,%xmm3 200610710Sddmitriev xorps %xmm4,%xmm0 200710710Sddmitriev shufps $140,%xmm0,%xmm4 200810710Sddmitriev pslldq $4,%xmm3 200910710Sddmitriev xorps %xmm4,%xmm0 201010710Sddmitriev pshufd $85,%xmm1,%xmm1 201110710Sddmitriev pxor %xmm3,%xmm2 201210710Sddmitriev pxor %xmm1,%xmm0 201310710Sddmitriev pshufd $255,%xmm0,%xmm3 201410710Sddmitriev pxor %xmm3,%xmm2 201510710Sddmitriev ret 201610710Sddmitriev.align 16 201710710Sddmitriev.L094key_192b: 201810710Sddmitriev movaps %xmm0,%xmm3 201910710Sddmitriev shufps $68,%xmm0,%xmm5 202010710Sddmitriev movups %xmm5,(%edx) 202110710Sddmitriev shufps $78,%xmm2,%xmm3 202210710Sddmitriev movups %xmm3,16(%edx) 202310710Sddmitriev leal 32(%edx),%edx 202410710Sddmitriev jmp .L096key_192b_warm 202510710Sddmitriev.align 16 202610710Sddmitriev.L08714rounds: 202710710Sddmitriev movups 16(%eax),%xmm2 202810710Sddmitriev movl $13,%ecx 202910710Sddmitriev leal 16(%edx),%edx 203010710Sddmitriev movups %xmm0,-32(%edx) 203110710Sddmitriev movups %xmm2,-16(%edx) 203210710Sddmitriev.byte 102,15,58,223,202,1 203310710Sddmitriev call .L097key_256a_cold 203410710Sddmitriev.byte 102,15,58,223,200,1 203510710Sddmitriev call .L098key_256b 203610710Sddmitriev.byte 102,15,58,223,202,2 203710710Sddmitriev call .L099key_256a 203810710Sddmitriev.byte 102,15,58,223,200,2 203910710Sddmitriev call .L098key_256b 204010710Sddmitriev.byte 102,15,58,223,202,4 204110710Sddmitriev call .L099key_256a 204210710Sddmitriev.byte 102,15,58,223,200,4 204310710Sddmitriev call .L098key_256b 204410710Sddmitriev.byte 102,15,58,223,202,8 204510710Sddmitriev call .L099key_256a 204610710Sddmitriev.byte 102,15,58,223,200,8 204710710Sddmitriev call .L098key_256b 204810710Sddmitriev.byte 102,15,58,223,202,16 204910710Sddmitriev call .L099key_256a 205010710Sddmitriev.byte 102,15,58,223,200,16 205110710Sddmitriev call .L098key_256b 205210710Sddmitriev.byte 102,15,58,223,202,32 205310710Sddmitriev call .L099key_256a 205410710Sddmitriev.byte 102,15,58,223,200,32 205510710Sddmitriev call .L098key_256b 205610710Sddmitriev.byte 102,15,58,223,202,64 205710710Sddmitriev call .L099key_256a 205810710Sddmitriev movups %xmm0,(%edx) 205910710Sddmitriev movl %ecx,16(%edx) 206010710Sddmitriev xorl %eax,%eax 206110710Sddmitriev ret 206210710Sddmitriev.align 16 206310710Sddmitriev.L099key_256a: 206410710Sddmitriev movups %xmm2,(%edx) 206510710Sddmitriev leal 16(%edx),%edx 206610710Sddmitriev.L097key_256a_cold: 206710710Sddmitriev shufps $16,%xmm0,%xmm4 206810710Sddmitriev xorps %xmm4,%xmm0 206910710Sddmitriev shufps $140,%xmm0,%xmm4 207010710Sddmitriev xorps %xmm4,%xmm0 207110710Sddmitriev shufps $255,%xmm1,%xmm1 207210710Sddmitriev xorps %xmm1,%xmm0 207310710Sddmitriev ret 207410710Sddmitriev.align 16 207510710Sddmitriev.L098key_256b: 207610710Sddmitriev movups %xmm0,(%edx) 207710710Sddmitriev leal 16(%edx),%edx 207810710Sddmitriev shufps $16,%xmm2,%xmm4 207910710Sddmitriev xorps %xmm4,%xmm2 208010710Sddmitriev shufps $140,%xmm2,%xmm4 208110710Sddmitriev xorps %xmm4,%xmm2 208210710Sddmitriev shufps $170,%xmm1,%xmm1 208310710Sddmitriev xorps %xmm1,%xmm2 208410710Sddmitriev ret 208510710Sddmitriev.align 4 208610710Sddmitriev.L086bad_pointer: 208710710Sddmitriev movl $-1,%eax 208810710Sddmitriev ret 208910710Sddmitriev.align 4 209010710Sddmitriev.L089bad_keybits: 209110710Sddmitriev movl $-2,%eax 209210710Sddmitriev ret 209310710Sddmitriev.size _aesni_set_encrypt_key,.-_aesni_set_encrypt_key 209410710Sddmitriev.globl aesni_set_encrypt_key 209510710Sddmitriev.type aesni_set_encrypt_key,@function 209610710Sddmitriev.align 16 209710710Sddmitrievaesni_set_encrypt_key: 209810710Sddmitriev.L_aesni_set_encrypt_key_begin: 209910710Sddmitriev movl 4(%esp),%eax 210010710Sddmitriev movl 8(%esp),%ecx 210110710Sddmitriev movl 12(%esp),%edx 210210710Sddmitriev call _aesni_set_encrypt_key 210310710Sddmitriev ret 210410710Sddmitriev.size aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin 210510710Sddmitriev.globl aesni_set_decrypt_key 210610710Sddmitriev.type aesni_set_decrypt_key,@function 210710710Sddmitriev.align 16 210810710Sddmitrievaesni_set_decrypt_key: 210910710Sddmitriev.L_aesni_set_decrypt_key_begin: 211010710Sddmitriev movl 4(%esp),%eax 211110710Sddmitriev movl 8(%esp),%ecx 211210710Sddmitriev movl 12(%esp),%edx 211310710Sddmitriev call _aesni_set_encrypt_key 211410710Sddmitriev movl 12(%esp),%edx 211510710Sddmitriev shll $4,%ecx 211610710Sddmitriev testl %eax,%eax 211710710Sddmitriev jnz .L100dec_key_ret 211810710Sddmitriev leal 16(%edx,%ecx,1),%eax 211910710Sddmitriev movups (%edx),%xmm0 212010710Sddmitriev movups (%eax),%xmm1 212110710Sddmitriev movups %xmm0,(%eax) 212210710Sddmitriev movups %xmm1,(%edx) 212310710Sddmitriev leal 16(%edx),%edx 212410710Sddmitriev leal -16(%eax),%eax 212510710Sddmitriev.L101dec_key_inverse: 212610710Sddmitriev movups (%edx),%xmm0 212710710Sddmitriev movups (%eax),%xmm1 212810710Sddmitriev.byte 102,15,56,219,192 212910710Sddmitriev.byte 102,15,56,219,201 213010710Sddmitriev leal 16(%edx),%edx 213110710Sddmitriev leal -16(%eax),%eax 213210710Sddmitriev movups %xmm0,16(%eax) 213310710Sddmitriev movups %xmm1,-16(%edx) 213410710Sddmitriev cmpl %edx,%eax 213510710Sddmitriev ja .L101dec_key_inverse 213610710Sddmitriev movups (%edx),%xmm0 213710710Sddmitriev.byte 102,15,56,219,192 213810710Sddmitriev movups %xmm0,(%edx) 213910710Sddmitriev xorl %eax,%eax 214010710Sddmitriev.L100dec_key_ret: 214110710Sddmitriev ret 214210710Sddmitriev.size aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin 214310710Sddmitriev.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 214410710Sddmitriev.byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 214510710Sddmitriev.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 214610710Sddmitriev.byte 115,108,46,111,114,103,62,0 214710710Sddmitriev#else 214810710Sddmitriev.file "aesni-x86.S" 214910710Sddmitriev.text 215010710Sddmitriev.globl aesni_encrypt 215110710Sddmitriev.type aesni_encrypt,@function 215210710Sddmitriev.align 16 215310710Sddmitrievaesni_encrypt: 215410710Sddmitriev.L_aesni_encrypt_begin: 215510710Sddmitriev movl 4(%esp),%eax 215610710Sddmitriev movl 12(%esp),%edx 215710710Sddmitriev movups (%eax),%xmm2 215810710Sddmitriev movl 240(%edx),%ecx 215910710Sddmitriev movl 8(%esp),%eax 216010710Sddmitriev movups (%edx),%xmm0 216110710Sddmitriev movups 16(%edx),%xmm1 216210710Sddmitriev leal 32(%edx),%edx 216310710Sddmitriev xorps %xmm0,%xmm2 216410710Sddmitriev.L000enc1_loop_1: 216510710Sddmitriev.byte 102,15,56,220,209 216610710Sddmitriev decl %ecx 216710710Sddmitriev movups (%edx),%xmm1 216810710Sddmitriev leal 16(%edx),%edx 216910710Sddmitriev jnz .L000enc1_loop_1 217010710Sddmitriev.byte 102,15,56,221,209 217110710Sddmitriev movups %xmm2,(%eax) 217210710Sddmitriev ret 217310710Sddmitriev.size aesni_encrypt,.-.L_aesni_encrypt_begin 217410710Sddmitriev.globl aesni_decrypt 217510710Sddmitriev.type aesni_decrypt,@function 217610710Sddmitriev.align 16 217710710Sddmitrievaesni_decrypt: 217810710Sddmitriev.L_aesni_decrypt_begin: 217910710Sddmitriev movl 4(%esp),%eax 218010710Sddmitriev movl 12(%esp),%edx 218110710Sddmitriev movups (%eax),%xmm2 218210710Sddmitriev movl 240(%edx),%ecx 218310710Sddmitriev movl 8(%esp),%eax 218410710Sddmitriev movups (%edx),%xmm0 218510710Sddmitriev movups 16(%edx),%xmm1 218610710Sddmitriev leal 32(%edx),%edx 218710710Sddmitriev xorps %xmm0,%xmm2 218810710Sddmitriev.L001dec1_loop_2: 218910710Sddmitriev.byte 102,15,56,222,209 219010710Sddmitriev decl %ecx 219110710Sddmitriev movups (%edx),%xmm1 219210710Sddmitriev leal 16(%edx),%edx 219310710Sddmitriev jnz .L001dec1_loop_2 219410710Sddmitriev.byte 102,15,56,223,209 219510710Sddmitriev movups %xmm2,(%eax) 219610710Sddmitriev ret 219710710Sddmitriev.size aesni_decrypt,.-.L_aesni_decrypt_begin 219810710Sddmitriev.type _aesni_encrypt3,@function 219910710Sddmitriev.align 16 220010710Sddmitriev_aesni_encrypt3: 220110710Sddmitriev movups (%edx),%xmm0 220210710Sddmitriev shrl $1,%ecx 220310710Sddmitriev movups 16(%edx),%xmm1 220410710Sddmitriev leal 32(%edx),%edx 220510710Sddmitriev xorps %xmm0,%xmm2 220610710Sddmitriev pxor %xmm0,%xmm3 220710710Sddmitriev pxor %xmm0,%xmm4 220810710Sddmitriev movups (%edx),%xmm0 220910710Sddmitriev.L002enc3_loop: 221010710Sddmitriev.byte 102,15,56,220,209 221110710Sddmitriev.byte 102,15,56,220,217 221210710Sddmitriev decl %ecx 221310710Sddmitriev.byte 102,15,56,220,225 221410710Sddmitriev movups 16(%edx),%xmm1 221510710Sddmitriev.byte 102,15,56,220,208 221610710Sddmitriev.byte 102,15,56,220,216 221710710Sddmitriev leal 32(%edx),%edx 221810710Sddmitriev.byte 102,15,56,220,224 221910710Sddmitriev movups (%edx),%xmm0 222010710Sddmitriev jnz .L002enc3_loop 222110710Sddmitriev.byte 102,15,56,220,209 222210710Sddmitriev.byte 102,15,56,220,217 222310710Sddmitriev.byte 102,15,56,220,225 222410710Sddmitriev.byte 102,15,56,221,208 222510710Sddmitriev.byte 102,15,56,221,216 222610710Sddmitriev.byte 102,15,56,221,224 222710710Sddmitriev ret 222810710Sddmitriev.size _aesni_encrypt3,.-_aesni_encrypt3 222910710Sddmitriev.type _aesni_decrypt3,@function 223010710Sddmitriev.align 16 223110710Sddmitriev_aesni_decrypt3: 223210710Sddmitriev movups (%edx),%xmm0 223310710Sddmitriev shrl $1,%ecx 223410710Sddmitriev movups 16(%edx),%xmm1 223510710Sddmitriev leal 32(%edx),%edx 223610710Sddmitriev xorps %xmm0,%xmm2 223710710Sddmitriev pxor %xmm0,%xmm3 223810710Sddmitriev pxor %xmm0,%xmm4 223910710Sddmitriev movups (%edx),%xmm0 224010710Sddmitriev.L003dec3_loop: 224110710Sddmitriev.byte 102,15,56,222,209 224210710Sddmitriev.byte 102,15,56,222,217 224310710Sddmitriev decl %ecx 224410710Sddmitriev.byte 102,15,56,222,225 224510710Sddmitriev movups 16(%edx),%xmm1 224610710Sddmitriev.byte 102,15,56,222,208 224710710Sddmitriev.byte 102,15,56,222,216 224810710Sddmitriev leal 32(%edx),%edx 224910710Sddmitriev.byte 102,15,56,222,224 225010710Sddmitriev movups (%edx),%xmm0 225110710Sddmitriev jnz .L003dec3_loop 225210710Sddmitriev.byte 102,15,56,222,209 225310710Sddmitriev.byte 102,15,56,222,217 225410710Sddmitriev.byte 102,15,56,222,225 225510710Sddmitriev.byte 102,15,56,223,208 225610710Sddmitriev.byte 102,15,56,223,216 225710710Sddmitriev.byte 102,15,56,223,224 225810710Sddmitriev ret 225910710Sddmitriev.size _aesni_decrypt3,.-_aesni_decrypt3 226010710Sddmitriev.type _aesni_encrypt4,@function 226110710Sddmitriev.align 16 226210710Sddmitriev_aesni_encrypt4: 226310710Sddmitriev movups (%edx),%xmm0 226410710Sddmitriev movups 16(%edx),%xmm1 226510710Sddmitriev shrl $1,%ecx 226610710Sddmitriev leal 32(%edx),%edx 226710710Sddmitriev xorps %xmm0,%xmm2 226810710Sddmitriev pxor %xmm0,%xmm3 226910710Sddmitriev pxor %xmm0,%xmm4 227010710Sddmitriev pxor %xmm0,%xmm5 227110710Sddmitriev movups (%edx),%xmm0 227210710Sddmitriev.L004enc4_loop: 227310710Sddmitriev.byte 102,15,56,220,209 227410710Sddmitriev.byte 102,15,56,220,217 227510710Sddmitriev decl %ecx 227610710Sddmitriev.byte 102,15,56,220,225 227710710Sddmitriev.byte 102,15,56,220,233 227810710Sddmitriev movups 16(%edx),%xmm1 227910710Sddmitriev.byte 102,15,56,220,208 228010710Sddmitriev.byte 102,15,56,220,216 228110710Sddmitriev leal 32(%edx),%edx 228210710Sddmitriev.byte 102,15,56,220,224 228310710Sddmitriev.byte 102,15,56,220,232 228410710Sddmitriev movups (%edx),%xmm0 228510710Sddmitriev jnz .L004enc4_loop 228610710Sddmitriev.byte 102,15,56,220,209 228710710Sddmitriev.byte 102,15,56,220,217 228810710Sddmitriev.byte 102,15,56,220,225 228910710Sddmitriev.byte 102,15,56,220,233 229010710Sddmitriev.byte 102,15,56,221,208 229110710Sddmitriev.byte 102,15,56,221,216 229210710Sddmitriev.byte 102,15,56,221,224 229310710Sddmitriev.byte 102,15,56,221,232 229410710Sddmitriev ret 229510710Sddmitriev.size _aesni_encrypt4,.-_aesni_encrypt4 229610710Sddmitriev.type _aesni_decrypt4,@function 229710710Sddmitriev.align 16 229810710Sddmitriev_aesni_decrypt4: 229910710Sddmitriev movups (%edx),%xmm0 230010710Sddmitriev movups 16(%edx),%xmm1 230110710Sddmitriev shrl $1,%ecx 230210710Sddmitriev leal 32(%edx),%edx 230310710Sddmitriev xorps %xmm0,%xmm2 230410710Sddmitriev pxor %xmm0,%xmm3 230510710Sddmitriev pxor %xmm0,%xmm4 230610710Sddmitriev pxor %xmm0,%xmm5 230710710Sddmitriev movups (%edx),%xmm0 230810710Sddmitriev.L005dec4_loop: 230910710Sddmitriev.byte 102,15,56,222,209 231010710Sddmitriev.byte 102,15,56,222,217 231110710Sddmitriev decl %ecx 231210710Sddmitriev.byte 102,15,56,222,225 231310710Sddmitriev.byte 102,15,56,222,233 231410710Sddmitriev movups 16(%edx),%xmm1 231510710Sddmitriev.byte 102,15,56,222,208 231610710Sddmitriev.byte 102,15,56,222,216 231710710Sddmitriev leal 32(%edx),%edx 231810710Sddmitriev.byte 102,15,56,222,224 231910710Sddmitriev.byte 102,15,56,222,232 232010710Sddmitriev movups (%edx),%xmm0 232110710Sddmitriev jnz .L005dec4_loop 232210710Sddmitriev.byte 102,15,56,222,209 232310710Sddmitriev.byte 102,15,56,222,217 232410710Sddmitriev.byte 102,15,56,222,225 232510710Sddmitriev.byte 102,15,56,222,233 232610710Sddmitriev.byte 102,15,56,223,208 232710710Sddmitriev.byte 102,15,56,223,216 232810710Sddmitriev.byte 102,15,56,223,224 232910710Sddmitriev.byte 102,15,56,223,232 233010710Sddmitriev ret 233110710Sddmitriev.size _aesni_decrypt4,.-_aesni_decrypt4 233210710Sddmitriev.type _aesni_encrypt6,@function 233310710Sddmitriev.align 16 233410710Sddmitriev_aesni_encrypt6: 233510710Sddmitriev movups (%edx),%xmm0 233610710Sddmitriev shrl $1,%ecx 233710710Sddmitriev movups 16(%edx),%xmm1 233810710Sddmitriev leal 32(%edx),%edx 233910710Sddmitriev xorps %xmm0,%xmm2 234010710Sddmitriev pxor %xmm0,%xmm3 234110710Sddmitriev.byte 102,15,56,220,209 234210710Sddmitriev pxor %xmm0,%xmm4 234310710Sddmitriev.byte 102,15,56,220,217 234410710Sddmitriev pxor %xmm0,%xmm5 234510710Sddmitriev decl %ecx 234610710Sddmitriev.byte 102,15,56,220,225 234710710Sddmitriev pxor %xmm0,%xmm6 234810710Sddmitriev.byte 102,15,56,220,233 234910710Sddmitriev pxor %xmm0,%xmm7 235010710Sddmitriev.byte 102,15,56,220,241 235110710Sddmitriev movups (%edx),%xmm0 235210710Sddmitriev.byte 102,15,56,220,249 235310710Sddmitriev jmp .L_aesni_encrypt6_enter 235410710Sddmitriev.align 16 235510710Sddmitriev.L006enc6_loop: 235610710Sddmitriev.byte 102,15,56,220,209 235710710Sddmitriev.byte 102,15,56,220,217 235810710Sddmitriev decl %ecx 235910710Sddmitriev.byte 102,15,56,220,225 236010710Sddmitriev.byte 102,15,56,220,233 236110710Sddmitriev.byte 102,15,56,220,241 236210710Sddmitriev.byte 102,15,56,220,249 236310710Sddmitriev.align 16 236410710Sddmitriev.L_aesni_encrypt6_enter: 236510710Sddmitriev movups 16(%edx),%xmm1 236610710Sddmitriev.byte 102,15,56,220,208 236710710Sddmitriev.byte 102,15,56,220,216 236810710Sddmitriev leal 32(%edx),%edx 236910710Sddmitriev.byte 102,15,56,220,224 237010710Sddmitriev.byte 102,15,56,220,232 237110710Sddmitriev.byte 102,15,56,220,240 237210710Sddmitriev.byte 102,15,56,220,248 237310710Sddmitriev movups (%edx),%xmm0 237410710Sddmitriev jnz .L006enc6_loop 237510710Sddmitriev.byte 102,15,56,220,209 237610710Sddmitriev.byte 102,15,56,220,217 237710710Sddmitriev.byte 102,15,56,220,225 237810710Sddmitriev.byte 102,15,56,220,233 237910710Sddmitriev.byte 102,15,56,220,241 238010710Sddmitriev.byte 102,15,56,220,249 238110710Sddmitriev.byte 102,15,56,221,208 238210710Sddmitriev.byte 102,15,56,221,216 238310710Sddmitriev.byte 102,15,56,221,224 238410710Sddmitriev.byte 102,15,56,221,232 238510710Sddmitriev.byte 102,15,56,221,240 238610710Sddmitriev.byte 102,15,56,221,248 238710710Sddmitriev ret 238810710Sddmitriev.size _aesni_encrypt6,.-_aesni_encrypt6 238910710Sddmitriev.type _aesni_decrypt6,@function 239010710Sddmitriev.align 16 239110710Sddmitriev_aesni_decrypt6: 239210710Sddmitriev movups (%edx),%xmm0 239310710Sddmitriev shrl $1,%ecx 239410710Sddmitriev movups 16(%edx),%xmm1 239510710Sddmitriev leal 32(%edx),%edx 239610710Sddmitriev xorps %xmm0,%xmm2 239710710Sddmitriev pxor %xmm0,%xmm3 239810710Sddmitriev.byte 102,15,56,222,209 239910710Sddmitriev pxor %xmm0,%xmm4 240010710Sddmitriev.byte 102,15,56,222,217 240110710Sddmitriev pxor %xmm0,%xmm5 240210710Sddmitriev decl %ecx 240310710Sddmitriev.byte 102,15,56,222,225 240410710Sddmitriev pxor %xmm0,%xmm6 240510710Sddmitriev.byte 102,15,56,222,233 240610710Sddmitriev pxor %xmm0,%xmm7 240710710Sddmitriev.byte 102,15,56,222,241 240810710Sddmitriev movups (%edx),%xmm0 240910710Sddmitriev.byte 102,15,56,222,249 241010710Sddmitriev jmp .L_aesni_decrypt6_enter 241110710Sddmitriev.align 16 241210710Sddmitriev.L007dec6_loop: 241310710Sddmitriev.byte 102,15,56,222,209 241410710Sddmitriev.byte 102,15,56,222,217 241510710Sddmitriev decl %ecx 241610710Sddmitriev.byte 102,15,56,222,225 241710710Sddmitriev.byte 102,15,56,222,233 241810710Sddmitriev.byte 102,15,56,222,241 241910710Sddmitriev.byte 102,15,56,222,249 242010710Sddmitriev.align 16 242110710Sddmitriev.L_aesni_decrypt6_enter: 242210710Sddmitriev movups 16(%edx),%xmm1 242310710Sddmitriev.byte 102,15,56,222,208 242410710Sddmitriev.byte 102,15,56,222,216 242510710Sddmitriev leal 32(%edx),%edx 242610710Sddmitriev.byte 102,15,56,222,224 242710710Sddmitriev.byte 102,15,56,222,232 242810710Sddmitriev.byte 102,15,56,222,240 242910710Sddmitriev.byte 102,15,56,222,248 243010710Sddmitriev movups (%edx),%xmm0 243110710Sddmitriev jnz .L007dec6_loop 243210710Sddmitriev.byte 102,15,56,222,209 243310710Sddmitriev.byte 102,15,56,222,217 243410710Sddmitriev.byte 102,15,56,222,225 243510710Sddmitriev.byte 102,15,56,222,233 243610710Sddmitriev.byte 102,15,56,222,241 243710710Sddmitriev.byte 102,15,56,222,249 243810710Sddmitriev.byte 102,15,56,223,208 243910710Sddmitriev.byte 102,15,56,223,216 244010710Sddmitriev.byte 102,15,56,223,224 244110710Sddmitriev.byte 102,15,56,223,232 244210710Sddmitriev.byte 102,15,56,223,240 244310710Sddmitriev.byte 102,15,56,223,248 244410710Sddmitriev ret 244510710Sddmitriev.size _aesni_decrypt6,.-_aesni_decrypt6 244610710Sddmitriev.globl aesni_ecb_encrypt 244710710Sddmitriev.type aesni_ecb_encrypt,@function 244810710Sddmitriev.align 16 244910710Sddmitrievaesni_ecb_encrypt: 245010710Sddmitriev.L_aesni_ecb_encrypt_begin: 245110710Sddmitriev pushl %ebp 245210710Sddmitriev pushl %ebx 245310710Sddmitriev pushl %esi 245410710Sddmitriev pushl %edi 245510710Sddmitriev movl 20(%esp),%esi 245610710Sddmitriev movl 24(%esp),%edi 245710710Sddmitriev movl 28(%esp),%eax 245810710Sddmitriev movl 32(%esp),%edx 245910710Sddmitriev movl 36(%esp),%ebx 246010710Sddmitriev andl $-16,%eax 246110710Sddmitriev jz .L008ecb_ret 246210710Sddmitriev movl 240(%edx),%ecx 246310710Sddmitriev testl %ebx,%ebx 246410710Sddmitriev jz .L009ecb_decrypt 246510710Sddmitriev movl %edx,%ebp 246610710Sddmitriev movl %ecx,%ebx 246710710Sddmitriev cmpl $96,%eax 246810710Sddmitriev jb .L010ecb_enc_tail 246910710Sddmitriev movdqu (%esi),%xmm2 247010710Sddmitriev movdqu 16(%esi),%xmm3 247110710Sddmitriev movdqu 32(%esi),%xmm4 247210710Sddmitriev movdqu 48(%esi),%xmm5 247310710Sddmitriev movdqu 64(%esi),%xmm6 247410710Sddmitriev movdqu 80(%esi),%xmm7 247510710Sddmitriev leal 96(%esi),%esi 247610710Sddmitriev subl $96,%eax 247710710Sddmitriev jmp .L011ecb_enc_loop6_enter 247810710Sddmitriev.align 16 247910710Sddmitriev.L012ecb_enc_loop6: 248010710Sddmitriev movups %xmm2,(%edi) 248110710Sddmitriev movdqu (%esi),%xmm2 248210710Sddmitriev movups %xmm3,16(%edi) 248310710Sddmitriev movdqu 16(%esi),%xmm3 248410710Sddmitriev movups %xmm4,32(%edi) 248510710Sddmitriev movdqu 32(%esi),%xmm4 248610710Sddmitriev movups %xmm5,48(%edi) 248710710Sddmitriev movdqu 48(%esi),%xmm5 248810710Sddmitriev movups %xmm6,64(%edi) 248910710Sddmitriev movdqu 64(%esi),%xmm6 249010710Sddmitriev movups %xmm7,80(%edi) 249110710Sddmitriev leal 96(%edi),%edi 249210710Sddmitriev movdqu 80(%esi),%xmm7 249310710Sddmitriev leal 96(%esi),%esi 249410710Sddmitriev.L011ecb_enc_loop6_enter: 249510710Sddmitriev call _aesni_encrypt6 249610710Sddmitriev movl %ebp,%edx 249710710Sddmitriev movl %ebx,%ecx 249810710Sddmitriev subl $96,%eax 249910710Sddmitriev jnc .L012ecb_enc_loop6 250010710Sddmitriev movups %xmm2,(%edi) 250110710Sddmitriev movups %xmm3,16(%edi) 250210710Sddmitriev movups %xmm4,32(%edi) 250310710Sddmitriev movups %xmm5,48(%edi) 250410710Sddmitriev movups %xmm6,64(%edi) 250510710Sddmitriev movups %xmm7,80(%edi) 250610710Sddmitriev leal 96(%edi),%edi 250710710Sddmitriev addl $96,%eax 250810710Sddmitriev jz .L008ecb_ret 250910710Sddmitriev.L010ecb_enc_tail: 251010710Sddmitriev movups (%esi),%xmm2 251110710Sddmitriev cmpl $32,%eax 251210710Sddmitriev jb .L013ecb_enc_one 251310710Sddmitriev movups 16(%esi),%xmm3 251410710Sddmitriev je .L014ecb_enc_two 251510710Sddmitriev movups 32(%esi),%xmm4 251610710Sddmitriev cmpl $64,%eax 251710710Sddmitriev jb .L015ecb_enc_three 251810710Sddmitriev movups 48(%esi),%xmm5 251910710Sddmitriev je .L016ecb_enc_four 252010710Sddmitriev movups 64(%esi),%xmm6 252110710Sddmitriev xorps %xmm7,%xmm7 252210710Sddmitriev call _aesni_encrypt6 252310710Sddmitriev movups %xmm2,(%edi) 252410710Sddmitriev movups %xmm3,16(%edi) 252510710Sddmitriev movups %xmm4,32(%edi) 252610710Sddmitriev movups %xmm5,48(%edi) 252710710Sddmitriev movups %xmm6,64(%edi) 252810710Sddmitriev jmp .L008ecb_ret 252910710Sddmitriev.align 16 253010710Sddmitriev.L013ecb_enc_one: 253110710Sddmitriev movups (%edx),%xmm0 253210710Sddmitriev movups 16(%edx),%xmm1 253310710Sddmitriev leal 32(%edx),%edx 253410710Sddmitriev xorps %xmm0,%xmm2 253510710Sddmitriev.L017enc1_loop_3: 253610710Sddmitriev.byte 102,15,56,220,209 253710710Sddmitriev decl %ecx 253810710Sddmitriev movups (%edx),%xmm1 253910710Sddmitriev leal 16(%edx),%edx 254010710Sddmitriev jnz .L017enc1_loop_3 254110710Sddmitriev.byte 102,15,56,221,209 254210710Sddmitriev movups %xmm2,(%edi) 254310710Sddmitriev jmp .L008ecb_ret 254410710Sddmitriev.align 16 254510710Sddmitriev.L014ecb_enc_two: 254610710Sddmitriev xorps %xmm4,%xmm4 254710710Sddmitriev call _aesni_encrypt3 254810710Sddmitriev movups %xmm2,(%edi) 254910710Sddmitriev movups %xmm3,16(%edi) 255010710Sddmitriev jmp .L008ecb_ret 255110710Sddmitriev.align 16 255210710Sddmitriev.L015ecb_enc_three: 255310710Sddmitriev call _aesni_encrypt3 255410710Sddmitriev movups %xmm2,(%edi) 255510710Sddmitriev movups %xmm3,16(%edi) 255610710Sddmitriev movups %xmm4,32(%edi) 255710710Sddmitriev jmp .L008ecb_ret 255810710Sddmitriev.align 16 255910710Sddmitriev.L016ecb_enc_four: 256010710Sddmitriev call _aesni_encrypt4 256110710Sddmitriev movups %xmm2,(%edi) 256210710Sddmitriev movups %xmm3,16(%edi) 256310710Sddmitriev movups %xmm4,32(%edi) 256410710Sddmitriev movups %xmm5,48(%edi) 256510710Sddmitriev jmp .L008ecb_ret 256610710Sddmitriev.align 16 256710710Sddmitriev.L009ecb_decrypt: 256810710Sddmitriev movl %edx,%ebp 256910710Sddmitriev movl %ecx,%ebx 257010710Sddmitriev cmpl $96,%eax 257110710Sddmitriev jb .L018ecb_dec_tail 257210710Sddmitriev movdqu (%esi),%xmm2 257310710Sddmitriev movdqu 16(%esi),%xmm3 257410710Sddmitriev movdqu 32(%esi),%xmm4 257510710Sddmitriev movdqu 48(%esi),%xmm5 257610710Sddmitriev movdqu 64(%esi),%xmm6 257710710Sddmitriev movdqu 80(%esi),%xmm7 257810710Sddmitriev leal 96(%esi),%esi 257910710Sddmitriev subl $96,%eax 258010710Sddmitriev jmp .L019ecb_dec_loop6_enter 258110710Sddmitriev.align 16 258210710Sddmitriev.L020ecb_dec_loop6: 258310710Sddmitriev movups %xmm2,(%edi) 258410710Sddmitriev movdqu (%esi),%xmm2 258510710Sddmitriev movups %xmm3,16(%edi) 258610710Sddmitriev movdqu 16(%esi),%xmm3 258710710Sddmitriev movups %xmm4,32(%edi) 258810710Sddmitriev movdqu 32(%esi),%xmm4 258910710Sddmitriev movups %xmm5,48(%edi) 259010710Sddmitriev movdqu 48(%esi),%xmm5 259110710Sddmitriev movups %xmm6,64(%edi) 259210710Sddmitriev movdqu 64(%esi),%xmm6 259310710Sddmitriev movups %xmm7,80(%edi) 259410710Sddmitriev leal 96(%edi),%edi 259510710Sddmitriev movdqu 80(%esi),%xmm7 259610710Sddmitriev leal 96(%esi),%esi 259710710Sddmitriev.L019ecb_dec_loop6_enter: 259810710Sddmitriev call _aesni_decrypt6 259910710Sddmitriev movl %ebp,%edx 260010710Sddmitriev movl %ebx,%ecx 260110710Sddmitriev subl $96,%eax 260210710Sddmitriev jnc .L020ecb_dec_loop6 260310710Sddmitriev movups %xmm2,(%edi) 260410710Sddmitriev movups %xmm3,16(%edi) 260510710Sddmitriev movups %xmm4,32(%edi) 260610710Sddmitriev movups %xmm5,48(%edi) 260710710Sddmitriev movups %xmm6,64(%edi) 260810710Sddmitriev movups %xmm7,80(%edi) 260910710Sddmitriev leal 96(%edi),%edi 261010710Sddmitriev addl $96,%eax 261110710Sddmitriev jz .L008ecb_ret 261210710Sddmitriev.L018ecb_dec_tail: 261310710Sddmitriev movups (%esi),%xmm2 261410710Sddmitriev cmpl $32,%eax 261510710Sddmitriev jb .L021ecb_dec_one 261610710Sddmitriev movups 16(%esi),%xmm3 261710710Sddmitriev je .L022ecb_dec_two 261810710Sddmitriev movups 32(%esi),%xmm4 261910710Sddmitriev cmpl $64,%eax 262010710Sddmitriev jb .L023ecb_dec_three 262110710Sddmitriev movups 48(%esi),%xmm5 262210710Sddmitriev je .L024ecb_dec_four 262310710Sddmitriev movups 64(%esi),%xmm6 262410710Sddmitriev xorps %xmm7,%xmm7 262510710Sddmitriev call _aesni_decrypt6 262610710Sddmitriev movups %xmm2,(%edi) 262710710Sddmitriev movups %xmm3,16(%edi) 262810710Sddmitriev movups %xmm4,32(%edi) 262910710Sddmitriev movups %xmm5,48(%edi) 263010710Sddmitriev movups %xmm6,64(%edi) 263110710Sddmitriev jmp .L008ecb_ret 263210710Sddmitriev.align 16 263310710Sddmitriev.L021ecb_dec_one: 263410710Sddmitriev movups (%edx),%xmm0 263510710Sddmitriev movups 16(%edx),%xmm1 263610710Sddmitriev leal 32(%edx),%edx 263710710Sddmitriev xorps %xmm0,%xmm2 263810710Sddmitriev.L025dec1_loop_4: 263910710Sddmitriev.byte 102,15,56,222,209 264010710Sddmitriev decl %ecx 264110710Sddmitriev movups (%edx),%xmm1 264210710Sddmitriev leal 16(%edx),%edx 264310710Sddmitriev jnz .L025dec1_loop_4 264410710Sddmitriev.byte 102,15,56,223,209 264510710Sddmitriev movups %xmm2,(%edi) 264610710Sddmitriev jmp .L008ecb_ret 264710710Sddmitriev.align 16 264810710Sddmitriev.L022ecb_dec_two: 264910710Sddmitriev xorps %xmm4,%xmm4 265010710Sddmitriev call _aesni_decrypt3 265110710Sddmitriev movups %xmm2,(%edi) 265210710Sddmitriev movups %xmm3,16(%edi) 265310710Sddmitriev jmp .L008ecb_ret 265410710Sddmitriev.align 16 265510710Sddmitriev.L023ecb_dec_three: 265610710Sddmitriev call _aesni_decrypt3 265710710Sddmitriev movups %xmm2,(%edi) 265810710Sddmitriev movups %xmm3,16(%edi) 265910710Sddmitriev movups %xmm4,32(%edi) 266010710Sddmitriev jmp .L008ecb_ret 266110710Sddmitriev.align 16 266210710Sddmitriev.L024ecb_dec_four: 266310710Sddmitriev call _aesni_decrypt4 266410710Sddmitriev movups %xmm2,(%edi) 266510710Sddmitriev movups %xmm3,16(%edi) 266610710Sddmitriev movups %xmm4,32(%edi) 266710710Sddmitriev movups %xmm5,48(%edi) 266810710Sddmitriev.L008ecb_ret: 266910710Sddmitriev popl %edi 267010710Sddmitriev popl %esi 267110710Sddmitriev popl %ebx 267210710Sddmitriev popl %ebp 267310710Sddmitriev ret 267410710Sddmitriev.size aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin 267510710Sddmitriev.globl aesni_ccm64_encrypt_blocks 267610710Sddmitriev.type aesni_ccm64_encrypt_blocks,@function 267710710Sddmitriev.align 16 267810710Sddmitrievaesni_ccm64_encrypt_blocks: 267910710Sddmitriev.L_aesni_ccm64_encrypt_blocks_begin: 268010710Sddmitriev pushl %ebp 268110710Sddmitriev pushl %ebx 268210710Sddmitriev pushl %esi 268310710Sddmitriev pushl %edi 268410710Sddmitriev movl 20(%esp),%esi 268510710Sddmitriev movl 24(%esp),%edi 268610710Sddmitriev movl 28(%esp),%eax 268710710Sddmitriev movl 32(%esp),%edx 268810710Sddmitriev movl 36(%esp),%ebx 268910710Sddmitriev movl 40(%esp),%ecx 269010710Sddmitriev movl %esp,%ebp 269110710Sddmitriev subl $60,%esp 269210710Sddmitriev andl $-16,%esp 269310710Sddmitriev movl %ebp,48(%esp) 269410710Sddmitriev movdqu (%ebx),%xmm7 269510710Sddmitriev movdqu (%ecx),%xmm3 269610710Sddmitriev movl 240(%edx),%ecx 269710710Sddmitriev movl $202182159,(%esp) 269810710Sddmitriev movl $134810123,4(%esp) 269910710Sddmitriev movl $67438087,8(%esp) 270010710Sddmitriev movl $66051,12(%esp) 270110710Sddmitriev movl $1,%ebx 270210710Sddmitriev xorl %ebp,%ebp 270310710Sddmitriev movl %ebx,16(%esp) 270410710Sddmitriev movl %ebp,20(%esp) 270510710Sddmitriev movl %ebp,24(%esp) 270610710Sddmitriev movl %ebp,28(%esp) 270710710Sddmitriev shrl $1,%ecx 270810710Sddmitriev leal (%edx),%ebp 270910710Sddmitriev movdqa (%esp),%xmm5 271010710Sddmitriev movdqa %xmm7,%xmm2 271110710Sddmitriev movl %ecx,%ebx 271210710Sddmitriev.byte 102,15,56,0,253 271310710Sddmitriev.L026ccm64_enc_outer: 271410710Sddmitriev movups (%ebp),%xmm0 271510710Sddmitriev movl %ebx,%ecx 271610710Sddmitriev movups (%esi),%xmm6 271710710Sddmitriev xorps %xmm0,%xmm2 271810710Sddmitriev movups 16(%ebp),%xmm1 271910710Sddmitriev xorps %xmm6,%xmm0 272010710Sddmitriev leal 32(%ebp),%edx 272110710Sddmitriev xorps %xmm0,%xmm3 272210710Sddmitriev movups (%edx),%xmm0 272310710Sddmitriev.L027ccm64_enc2_loop: 272410710Sddmitriev.byte 102,15,56,220,209 272510710Sddmitriev decl %ecx 272610710Sddmitriev.byte 102,15,56,220,217 272710710Sddmitriev movups 16(%edx),%xmm1 272810710Sddmitriev.byte 102,15,56,220,208 272910710Sddmitriev leal 32(%edx),%edx 273010710Sddmitriev.byte 102,15,56,220,216 273110710Sddmitriev movups (%edx),%xmm0 273210710Sddmitriev jnz .L027ccm64_enc2_loop 273310710Sddmitriev.byte 102,15,56,220,209 273410710Sddmitriev.byte 102,15,56,220,217 273510710Sddmitriev paddq 16(%esp),%xmm7 273610710Sddmitriev.byte 102,15,56,221,208 273710710Sddmitriev.byte 102,15,56,221,216 273810710Sddmitriev decl %eax 273910710Sddmitriev leal 16(%esi),%esi 274010710Sddmitriev xorps %xmm2,%xmm6 274110710Sddmitriev movdqa %xmm7,%xmm2 274210710Sddmitriev movups %xmm6,(%edi) 274310710Sddmitriev leal 16(%edi),%edi 274410710Sddmitriev.byte 102,15,56,0,213 274510710Sddmitriev jnz .L026ccm64_enc_outer 274610710Sddmitriev movl 48(%esp),%esp 274710710Sddmitriev movl 40(%esp),%edi 274810710Sddmitriev movups %xmm3,(%edi) 274910710Sddmitriev popl %edi 275010710Sddmitriev popl %esi 275110710Sddmitriev popl %ebx 275210710Sddmitriev popl %ebp 275310710Sddmitriev ret 275410710Sddmitriev.size aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin 275510710Sddmitriev.globl aesni_ccm64_decrypt_blocks 275610710Sddmitriev.type aesni_ccm64_decrypt_blocks,@function 275710710Sddmitriev.align 16 275810710Sddmitrievaesni_ccm64_decrypt_blocks: 275910710Sddmitriev.L_aesni_ccm64_decrypt_blocks_begin: 276010710Sddmitriev pushl %ebp 276110710Sddmitriev pushl %ebx 276210710Sddmitriev pushl %esi 276310710Sddmitriev pushl %edi 276410710Sddmitriev movl 20(%esp),%esi 276510710Sddmitriev movl 24(%esp),%edi 276610710Sddmitriev movl 28(%esp),%eax 276710710Sddmitriev movl 32(%esp),%edx 276810710Sddmitriev movl 36(%esp),%ebx 276910710Sddmitriev movl 40(%esp),%ecx 277010710Sddmitriev movl %esp,%ebp 277110710Sddmitriev subl $60,%esp 277210710Sddmitriev andl $-16,%esp 277310710Sddmitriev movl %ebp,48(%esp) 277410710Sddmitriev movdqu (%ebx),%xmm7 277510710Sddmitriev movdqu (%ecx),%xmm3 277610710Sddmitriev movl 240(%edx),%ecx 277710710Sddmitriev movl $202182159,(%esp) 277810710Sddmitriev movl $134810123,4(%esp) 277910710Sddmitriev movl $67438087,8(%esp) 278010710Sddmitriev movl $66051,12(%esp) 278110710Sddmitriev movl $1,%ebx 278210710Sddmitriev xorl %ebp,%ebp 278310710Sddmitriev movl %ebx,16(%esp) 278410710Sddmitriev movl %ebp,20(%esp) 278510710Sddmitriev movl %ebp,24(%esp) 278610710Sddmitriev movl %ebp,28(%esp) 278710710Sddmitriev movdqa (%esp),%xmm5 278810710Sddmitriev movdqa %xmm7,%xmm2 278910710Sddmitriev movl %edx,%ebp 279010710Sddmitriev movl %ecx,%ebx 279110710Sddmitriev.byte 102,15,56,0,253 279210710Sddmitriev movups (%edx),%xmm0 279310710Sddmitriev movups 16(%edx),%xmm1 279410710Sddmitriev leal 32(%edx),%edx 279510710Sddmitriev xorps %xmm0,%xmm2 279610710Sddmitriev.L028enc1_loop_5: 279710710Sddmitriev.byte 102,15,56,220,209 279810710Sddmitriev decl %ecx 279910710Sddmitriev movups (%edx),%xmm1 280010710Sddmitriev leal 16(%edx),%edx 280110710Sddmitriev jnz .L028enc1_loop_5 280210710Sddmitriev.byte 102,15,56,221,209 280310710Sddmitriev movups (%esi),%xmm6 280410710Sddmitriev paddq 16(%esp),%xmm7 280510710Sddmitriev leal 16(%esi),%esi 280610710Sddmitriev jmp .L029ccm64_dec_outer 280710710Sddmitriev.align 16 280810710Sddmitriev.L029ccm64_dec_outer: 280910710Sddmitriev xorps %xmm2,%xmm6 281010710Sddmitriev movdqa %xmm7,%xmm2 281110710Sddmitriev movl %ebx,%ecx 281210710Sddmitriev movups %xmm6,(%edi) 281310710Sddmitriev leal 16(%edi),%edi 281410710Sddmitriev.byte 102,15,56,0,213 281510710Sddmitriev subl $1,%eax 281610710Sddmitriev jz .L030ccm64_dec_break 281710710Sddmitriev movups (%ebp),%xmm0 281810710Sddmitriev shrl $1,%ecx 281910710Sddmitriev movups 16(%ebp),%xmm1 282010710Sddmitriev xorps %xmm0,%xmm6 282110710Sddmitriev leal 32(%ebp),%edx 282210710Sddmitriev xorps %xmm0,%xmm2 282310710Sddmitriev xorps %xmm6,%xmm3 282410710Sddmitriev movups (%edx),%xmm0 282510710Sddmitriev.L031ccm64_dec2_loop: 282610710Sddmitriev.byte 102,15,56,220,209 282710710Sddmitriev decl %ecx 282810710Sddmitriev.byte 102,15,56,220,217 282910710Sddmitriev movups 16(%edx),%xmm1 283010710Sddmitriev.byte 102,15,56,220,208 283110710Sddmitriev leal 32(%edx),%edx 283210710Sddmitriev.byte 102,15,56,220,216 283310710Sddmitriev movups (%edx),%xmm0 283410710Sddmitriev jnz .L031ccm64_dec2_loop 283510710Sddmitriev movups (%esi),%xmm6 283610710Sddmitriev paddq 16(%esp),%xmm7 283710710Sddmitriev.byte 102,15,56,220,209 283810710Sddmitriev.byte 102,15,56,220,217 283910710Sddmitriev leal 16(%esi),%esi 284010710Sddmitriev.byte 102,15,56,221,208 284110710Sddmitriev.byte 102,15,56,221,216 284210710Sddmitriev jmp .L029ccm64_dec_outer 284310710Sddmitriev.align 16 284410710Sddmitriev.L030ccm64_dec_break: 284510710Sddmitriev movl %ebp,%edx 284610710Sddmitriev movups (%edx),%xmm0 284710710Sddmitriev movups 16(%edx),%xmm1 284810710Sddmitriev xorps %xmm0,%xmm6 284910710Sddmitriev leal 32(%edx),%edx 285010710Sddmitriev xorps %xmm6,%xmm3 285110710Sddmitriev.L032enc1_loop_6: 285210710Sddmitriev.byte 102,15,56,220,217 285310710Sddmitriev decl %ecx 285410710Sddmitriev movups (%edx),%xmm1 285510710Sddmitriev leal 16(%edx),%edx 285610710Sddmitriev jnz .L032enc1_loop_6 285710710Sddmitriev.byte 102,15,56,221,217 285810710Sddmitriev movl 48(%esp),%esp 285910710Sddmitriev movl 40(%esp),%edi 286010710Sddmitriev movups %xmm3,(%edi) 286110710Sddmitriev popl %edi 286210710Sddmitriev popl %esi 286310710Sddmitriev popl %ebx 286410710Sddmitriev popl %ebp 286510710Sddmitriev ret 286610710Sddmitriev.size aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin 286710710Sddmitriev.globl aesni_ctr32_encrypt_blocks 286810710Sddmitriev.type aesni_ctr32_encrypt_blocks,@function 286910710Sddmitriev.align 16 287010710Sddmitrievaesni_ctr32_encrypt_blocks: 287110710Sddmitriev.L_aesni_ctr32_encrypt_blocks_begin: 287210710Sddmitriev pushl %ebp 287310710Sddmitriev pushl %ebx 287410710Sddmitriev pushl %esi 287510710Sddmitriev pushl %edi 287610710Sddmitriev movl 20(%esp),%esi 287710710Sddmitriev movl 24(%esp),%edi 287810710Sddmitriev movl 28(%esp),%eax 287910710Sddmitriev movl 32(%esp),%edx 288010710Sddmitriev movl 36(%esp),%ebx 288110710Sddmitriev movl %esp,%ebp 288210710Sddmitriev subl $88,%esp 288310710Sddmitriev andl $-16,%esp 288410710Sddmitriev movl %ebp,80(%esp) 288510710Sddmitriev cmpl $1,%eax 288610710Sddmitriev je .L033ctr32_one_shortcut 288710710Sddmitriev movdqu (%ebx),%xmm7 288810710Sddmitriev movl $202182159,(%esp) 288910710Sddmitriev movl $134810123,4(%esp) 289010710Sddmitriev movl $67438087,8(%esp) 289110710Sddmitriev movl $66051,12(%esp) 289210710Sddmitriev movl $6,%ecx 289310710Sddmitriev xorl %ebp,%ebp 289410710Sddmitriev movl %ecx,16(%esp) 289510710Sddmitriev movl %ecx,20(%esp) 289610710Sddmitriev movl %ecx,24(%esp) 289710710Sddmitriev movl %ebp,28(%esp) 289810710Sddmitriev.byte 102,15,58,22,251,3 289910710Sddmitriev.byte 102,15,58,34,253,3 290010710Sddmitriev movl 240(%edx),%ecx 290110710Sddmitriev bswap %ebx 290210710Sddmitriev pxor %xmm1,%xmm1 290310710Sddmitriev pxor %xmm0,%xmm0 290410710Sddmitriev movdqa (%esp),%xmm2 290510710Sddmitriev.byte 102,15,58,34,203,0 290610710Sddmitriev leal 3(%ebx),%ebp 290710710Sddmitriev.byte 102,15,58,34,197,0 290810710Sddmitriev incl %ebx 290910710Sddmitriev.byte 102,15,58,34,203,1 291010710Sddmitriev incl %ebp 291110710Sddmitriev.byte 102,15,58,34,197,1 291210710Sddmitriev incl %ebx 291310710Sddmitriev.byte 102,15,58,34,203,2 291410710Sddmitriev incl %ebp 291510710Sddmitriev.byte 102,15,58,34,197,2 291610710Sddmitriev movdqa %xmm1,48(%esp) 291710710Sddmitriev.byte 102,15,56,0,202 291810710Sddmitriev movdqa %xmm0,64(%esp) 291910710Sddmitriev.byte 102,15,56,0,194 292010710Sddmitriev pshufd $192,%xmm1,%xmm2 292110710Sddmitriev pshufd $128,%xmm1,%xmm3 292210710Sddmitriev cmpl $6,%eax 292310710Sddmitriev jb .L034ctr32_tail 292410710Sddmitriev movdqa %xmm7,32(%esp) 292510710Sddmitriev shrl $1,%ecx 292610710Sddmitriev movl %edx,%ebp 292710710Sddmitriev movl %ecx,%ebx 292810710Sddmitriev subl $6,%eax 292910710Sddmitriev jmp .L035ctr32_loop6 293010710Sddmitriev.align 16 293110710Sddmitriev.L035ctr32_loop6: 293210710Sddmitriev pshufd $64,%xmm1,%xmm4 293310710Sddmitriev movdqa 32(%esp),%xmm1 293410710Sddmitriev pshufd $192,%xmm0,%xmm5 293510710Sddmitriev por %xmm1,%xmm2 293610710Sddmitriev pshufd $128,%xmm0,%xmm6 293710710Sddmitriev por %xmm1,%xmm3 293810710Sddmitriev pshufd $64,%xmm0,%xmm7 293910710Sddmitriev por %xmm1,%xmm4 294010710Sddmitriev por %xmm1,%xmm5 294110710Sddmitriev por %xmm1,%xmm6 294210710Sddmitriev por %xmm1,%xmm7 294310710Sddmitriev movups (%ebp),%xmm0 294410710Sddmitriev movups 16(%ebp),%xmm1 294510710Sddmitriev leal 32(%ebp),%edx 294610710Sddmitriev decl %ecx 294710710Sddmitriev pxor %xmm0,%xmm2 294810710Sddmitriev pxor %xmm0,%xmm3 294910710Sddmitriev.byte 102,15,56,220,209 295010710Sddmitriev pxor %xmm0,%xmm4 295110710Sddmitriev.byte 102,15,56,220,217 295210710Sddmitriev pxor %xmm0,%xmm5 295310710Sddmitriev.byte 102,15,56,220,225 295410710Sddmitriev pxor %xmm0,%xmm6 295510710Sddmitriev.byte 102,15,56,220,233 295610710Sddmitriev pxor %xmm0,%xmm7 295710710Sddmitriev.byte 102,15,56,220,241 295810710Sddmitriev movups (%edx),%xmm0 295910710Sddmitriev.byte 102,15,56,220,249 296010710Sddmitriev call .L_aesni_encrypt6_enter 296110710Sddmitriev movups (%esi),%xmm1 296210710Sddmitriev movups 16(%esi),%xmm0 296310710Sddmitriev xorps %xmm1,%xmm2 296410710Sddmitriev movups 32(%esi),%xmm1 296510710Sddmitriev xorps %xmm0,%xmm3 296610710Sddmitriev movups %xmm2,(%edi) 296710710Sddmitriev movdqa 16(%esp),%xmm0 296810710Sddmitriev xorps %xmm1,%xmm4 296910710Sddmitriev movdqa 48(%esp),%xmm1 297010710Sddmitriev movups %xmm3,16(%edi) 297110710Sddmitriev movups %xmm4,32(%edi) 297210710Sddmitriev paddd %xmm0,%xmm1 297310710Sddmitriev paddd 64(%esp),%xmm0 297410710Sddmitriev movdqa (%esp),%xmm2 297510710Sddmitriev movups 48(%esi),%xmm3 297610710Sddmitriev movups 64(%esi),%xmm4 297710710Sddmitriev xorps %xmm3,%xmm5 297810710Sddmitriev movups 80(%esi),%xmm3 297910710Sddmitriev leal 96(%esi),%esi 298010710Sddmitriev movdqa %xmm1,48(%esp) 298110710Sddmitriev.byte 102,15,56,0,202 298210710Sddmitriev xorps %xmm4,%xmm6 298310710Sddmitriev movups %xmm5,48(%edi) 298410710Sddmitriev xorps %xmm3,%xmm7 298510710Sddmitriev movdqa %xmm0,64(%esp) 298610710Sddmitriev.byte 102,15,56,0,194 298710710Sddmitriev movups %xmm6,64(%edi) 298810710Sddmitriev pshufd $192,%xmm1,%xmm2 298910710Sddmitriev movups %xmm7,80(%edi) 299010710Sddmitriev leal 96(%edi),%edi 299110710Sddmitriev movl %ebx,%ecx 299210710Sddmitriev pshufd $128,%xmm1,%xmm3 299310710Sddmitriev subl $6,%eax 299410710Sddmitriev jnc .L035ctr32_loop6 299510710Sddmitriev addl $6,%eax 299610710Sddmitriev jz .L036ctr32_ret 299710710Sddmitriev movl %ebp,%edx 299810710Sddmitriev leal 1(,%ecx,2),%ecx 299910710Sddmitriev movdqa 32(%esp),%xmm7 300010710Sddmitriev.L034ctr32_tail: 300110710Sddmitriev por %xmm7,%xmm2 300210710Sddmitriev cmpl $2,%eax 300310710Sddmitriev jb .L037ctr32_one 300410710Sddmitriev pshufd $64,%xmm1,%xmm4 300510710Sddmitriev por %xmm7,%xmm3 300610710Sddmitriev je .L038ctr32_two 300710710Sddmitriev pshufd $192,%xmm0,%xmm5 300810710Sddmitriev por %xmm7,%xmm4 300910710Sddmitriev cmpl $4,%eax 301010710Sddmitriev jb .L039ctr32_three 301110710Sddmitriev pshufd $128,%xmm0,%xmm6 301210710Sddmitriev por %xmm7,%xmm5 301310710Sddmitriev je .L040ctr32_four 301410710Sddmitriev por %xmm7,%xmm6 301510710Sddmitriev call _aesni_encrypt6 301610710Sddmitriev movups (%esi),%xmm1 301710710Sddmitriev movups 16(%esi),%xmm0 301810710Sddmitriev xorps %xmm1,%xmm2 301910710Sddmitriev movups 32(%esi),%xmm1 302010710Sddmitriev xorps %xmm0,%xmm3 302110710Sddmitriev movups 48(%esi),%xmm0 302210710Sddmitriev xorps %xmm1,%xmm4 302310710Sddmitriev movups 64(%esi),%xmm1 302410710Sddmitriev xorps %xmm0,%xmm5 302510710Sddmitriev movups %xmm2,(%edi) 302610710Sddmitriev xorps %xmm1,%xmm6 302710710Sddmitriev movups %xmm3,16(%edi) 302810710Sddmitriev movups %xmm4,32(%edi) 302910710Sddmitriev movups %xmm5,48(%edi) 303010710Sddmitriev movups %xmm6,64(%edi) 303110710Sddmitriev jmp .L036ctr32_ret 303210710Sddmitriev.align 16 303310710Sddmitriev.L033ctr32_one_shortcut: 303410710Sddmitriev movups (%ebx),%xmm2 303510710Sddmitriev movl 240(%edx),%ecx 303610710Sddmitriev.L037ctr32_one: 303710710Sddmitriev movups (%edx),%xmm0 303810710Sddmitriev movups 16(%edx),%xmm1 303910710Sddmitriev leal 32(%edx),%edx 304010710Sddmitriev xorps %xmm0,%xmm2 304110710Sddmitriev.L041enc1_loop_7: 304210710Sddmitriev.byte 102,15,56,220,209 304310710Sddmitriev decl %ecx 304410710Sddmitriev movups (%edx),%xmm1 304510710Sddmitriev leal 16(%edx),%edx 304610710Sddmitriev jnz .L041enc1_loop_7 304710710Sddmitriev.byte 102,15,56,221,209 304810710Sddmitriev movups (%esi),%xmm6 304910710Sddmitriev xorps %xmm2,%xmm6 305010710Sddmitriev movups %xmm6,(%edi) 305110710Sddmitriev jmp .L036ctr32_ret 305210710Sddmitriev.align 16 305310710Sddmitriev.L038ctr32_two: 305410710Sddmitriev call _aesni_encrypt3 305510710Sddmitriev movups (%esi),%xmm5 305610710Sddmitriev movups 16(%esi),%xmm6 305710710Sddmitriev xorps %xmm5,%xmm2 305810710Sddmitriev xorps %xmm6,%xmm3 305910710Sddmitriev movups %xmm2,(%edi) 306010710Sddmitriev movups %xmm3,16(%edi) 306110710Sddmitriev jmp .L036ctr32_ret 306210710Sddmitriev.align 16 306310710Sddmitriev.L039ctr32_three: 306410710Sddmitriev call _aesni_encrypt3 306510710Sddmitriev movups (%esi),%xmm5 306610710Sddmitriev movups 16(%esi),%xmm6 306710710Sddmitriev xorps %xmm5,%xmm2 306810710Sddmitriev movups 32(%esi),%xmm7 306910710Sddmitriev xorps %xmm6,%xmm3 307010710Sddmitriev movups %xmm2,(%edi) 307110710Sddmitriev xorps %xmm7,%xmm4 307210710Sddmitriev movups %xmm3,16(%edi) 307310710Sddmitriev movups %xmm4,32(%edi) 307410710Sddmitriev jmp .L036ctr32_ret 307510710Sddmitriev.align 16 307610710Sddmitriev.L040ctr32_four: 307710710Sddmitriev call _aesni_encrypt4 307810710Sddmitriev movups (%esi),%xmm6 307910710Sddmitriev movups 16(%esi),%xmm7 308010710Sddmitriev movups 32(%esi),%xmm1 308110710Sddmitriev xorps %xmm6,%xmm2 308210710Sddmitriev movups 48(%esi),%xmm0 308310710Sddmitriev xorps %xmm7,%xmm3 308410710Sddmitriev movups %xmm2,(%edi) 308510710Sddmitriev xorps %xmm1,%xmm4 308610710Sddmitriev movups %xmm3,16(%edi) 308710710Sddmitriev xorps %xmm0,%xmm5 308810710Sddmitriev movups %xmm4,32(%edi) 308910710Sddmitriev movups %xmm5,48(%edi) 309010710Sddmitriev.L036ctr32_ret: 309110710Sddmitriev movl 80(%esp),%esp 309210710Sddmitriev popl %edi 309310710Sddmitriev popl %esi 309410710Sddmitriev popl %ebx 309510710Sddmitriev popl %ebp 309610710Sddmitriev ret 309710710Sddmitriev.size aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin 309810710Sddmitriev.globl aesni_xts_encrypt 309910710Sddmitriev.type aesni_xts_encrypt,@function 310010710Sddmitriev.align 16 310110710Sddmitrievaesni_xts_encrypt: 310210710Sddmitriev.L_aesni_xts_encrypt_begin: 310310710Sddmitriev pushl %ebp 310410710Sddmitriev pushl %ebx 310510710Sddmitriev pushl %esi 310610710Sddmitriev pushl %edi 310710710Sddmitriev movl 36(%esp),%edx 310810710Sddmitriev movl 40(%esp),%esi 310910710Sddmitriev movl 240(%edx),%ecx 311010710Sddmitriev movups (%esi),%xmm2 311110710Sddmitriev movups (%edx),%xmm0 311210710Sddmitriev movups 16(%edx),%xmm1 311310710Sddmitriev leal 32(%edx),%edx 311410710Sddmitriev xorps %xmm0,%xmm2 311510710Sddmitriev.L042enc1_loop_8: 311610710Sddmitriev.byte 102,15,56,220,209 311710710Sddmitriev decl %ecx 311810710Sddmitriev movups (%edx),%xmm1 311910710Sddmitriev leal 16(%edx),%edx 312010710Sddmitriev jnz .L042enc1_loop_8 312110710Sddmitriev.byte 102,15,56,221,209 312210710Sddmitriev movl 20(%esp),%esi 312310710Sddmitriev movl 24(%esp),%edi 312410710Sddmitriev movl 28(%esp),%eax 312510710Sddmitriev movl 32(%esp),%edx 312610710Sddmitriev movl %esp,%ebp 312710710Sddmitriev subl $120,%esp 312810710Sddmitriev movl 240(%edx),%ecx 312910710Sddmitriev andl $-16,%esp 313010710Sddmitriev movl $135,96(%esp) 313110710Sddmitriev movl $0,100(%esp) 313210710Sddmitriev movl $1,104(%esp) 313310710Sddmitriev movl $0,108(%esp) 313410710Sddmitriev movl %eax,112(%esp) 313510710Sddmitriev movl %ebp,116(%esp) 313610710Sddmitriev movdqa %xmm2,%xmm1 313710710Sddmitriev pxor %xmm0,%xmm0 313810710Sddmitriev movdqa 96(%esp),%xmm3 313910710Sddmitriev pcmpgtd %xmm1,%xmm0 314010710Sddmitriev andl $-16,%eax 314110710Sddmitriev movl %edx,%ebp 314210710Sddmitriev movl %ecx,%ebx 314310710Sddmitriev subl $96,%eax 314410710Sddmitriev jc .L043xts_enc_short 314510710Sddmitriev shrl $1,%ecx 314610710Sddmitriev movl %ecx,%ebx 314710710Sddmitriev jmp .L044xts_enc_loop6 314810710Sddmitriev.align 16 314910710Sddmitriev.L044xts_enc_loop6: 315010710Sddmitriev pshufd $19,%xmm0,%xmm2 315110710Sddmitriev pxor %xmm0,%xmm0 315210710Sddmitriev movdqa %xmm1,(%esp) 315310710Sddmitriev paddq %xmm1,%xmm1 315410710Sddmitriev pand %xmm3,%xmm2 315510710Sddmitriev pcmpgtd %xmm1,%xmm0 315610710Sddmitriev pxor %xmm2,%xmm1 315710710Sddmitriev pshufd $19,%xmm0,%xmm2 315810710Sddmitriev pxor %xmm0,%xmm0 315910710Sddmitriev movdqa %xmm1,16(%esp) 316010710Sddmitriev paddq %xmm1,%xmm1 316110710Sddmitriev pand %xmm3,%xmm2 316210710Sddmitriev pcmpgtd %xmm1,%xmm0 316310710Sddmitriev pxor %xmm2,%xmm1 316410710Sddmitriev pshufd $19,%xmm0,%xmm2 316510710Sddmitriev pxor %xmm0,%xmm0 316610710Sddmitriev movdqa %xmm1,32(%esp) 316710710Sddmitriev paddq %xmm1,%xmm1 316810710Sddmitriev pand %xmm3,%xmm2 316910710Sddmitriev pcmpgtd %xmm1,%xmm0 317010710Sddmitriev pxor %xmm2,%xmm1 317110710Sddmitriev pshufd $19,%xmm0,%xmm2 317210710Sddmitriev pxor %xmm0,%xmm0 317310710Sddmitriev movdqa %xmm1,48(%esp) 317410710Sddmitriev paddq %xmm1,%xmm1 317510710Sddmitriev pand %xmm3,%xmm2 317610710Sddmitriev pcmpgtd %xmm1,%xmm0 317710710Sddmitriev pxor %xmm2,%xmm1 317810710Sddmitriev pshufd $19,%xmm0,%xmm7 317910710Sddmitriev movdqa %xmm1,64(%esp) 318010710Sddmitriev paddq %xmm1,%xmm1 318110710Sddmitriev movups (%ebp),%xmm0 318210710Sddmitriev pand %xmm3,%xmm7 318310710Sddmitriev movups (%esi),%xmm2 318410710Sddmitriev pxor %xmm1,%xmm7 318510710Sddmitriev movdqu 16(%esi),%xmm3 318610710Sddmitriev xorps %xmm0,%xmm2 318710710Sddmitriev movdqu 32(%esi),%xmm4 318810710Sddmitriev pxor %xmm0,%xmm3 318910710Sddmitriev movdqu 48(%esi),%xmm5 319010710Sddmitriev pxor %xmm0,%xmm4 319110710Sddmitriev movdqu 64(%esi),%xmm6 319210710Sddmitriev pxor %xmm0,%xmm5 319310710Sddmitriev movdqu 80(%esi),%xmm1 319410710Sddmitriev pxor %xmm0,%xmm6 319510710Sddmitriev leal 96(%esi),%esi 319610710Sddmitriev pxor (%esp),%xmm2 319710710Sddmitriev movdqa %xmm7,80(%esp) 319810710Sddmitriev pxor %xmm1,%xmm7 319910710Sddmitriev movups 16(%ebp),%xmm1 320010710Sddmitriev leal 32(%ebp),%edx 320110710Sddmitriev pxor 16(%esp),%xmm3 320210710Sddmitriev.byte 102,15,56,220,209 320310710Sddmitriev pxor 32(%esp),%xmm4 320410710Sddmitriev.byte 102,15,56,220,217 320510710Sddmitriev pxor 48(%esp),%xmm5 320610710Sddmitriev decl %ecx 320710710Sddmitriev.byte 102,15,56,220,225 320810710Sddmitriev pxor 64(%esp),%xmm6 320910710Sddmitriev.byte 102,15,56,220,233 321010710Sddmitriev pxor %xmm0,%xmm7 321110710Sddmitriev.byte 102,15,56,220,241 321210710Sddmitriev movups (%edx),%xmm0 321310710Sddmitriev.byte 102,15,56,220,249 321410710Sddmitriev call .L_aesni_encrypt6_enter 321510710Sddmitriev movdqa 80(%esp),%xmm1 321610710Sddmitriev pxor %xmm0,%xmm0 321710710Sddmitriev xorps (%esp),%xmm2 321810710Sddmitriev pcmpgtd %xmm1,%xmm0 321910710Sddmitriev xorps 16(%esp),%xmm3 322010710Sddmitriev movups %xmm2,(%edi) 322110710Sddmitriev xorps 32(%esp),%xmm4 322210710Sddmitriev movups %xmm3,16(%edi) 322310710Sddmitriev xorps 48(%esp),%xmm5 322410710Sddmitriev movups %xmm4,32(%edi) 322510710Sddmitriev xorps 64(%esp),%xmm6 322610710Sddmitriev movups %xmm5,48(%edi) 322710710Sddmitriev xorps %xmm1,%xmm7 322810710Sddmitriev movups %xmm6,64(%edi) 322910710Sddmitriev pshufd $19,%xmm0,%xmm2 323010710Sddmitriev movups %xmm7,80(%edi) 323110710Sddmitriev leal 96(%edi),%edi 323210710Sddmitriev movdqa 96(%esp),%xmm3 323310710Sddmitriev pxor %xmm0,%xmm0 323410710Sddmitriev paddq %xmm1,%xmm1 323510710Sddmitriev pand %xmm3,%xmm2 323610710Sddmitriev pcmpgtd %xmm1,%xmm0 323710710Sddmitriev movl %ebx,%ecx 323810710Sddmitriev pxor %xmm2,%xmm1 323910710Sddmitriev subl $96,%eax 324010710Sddmitriev jnc .L044xts_enc_loop6 324110710Sddmitriev leal 1(,%ecx,2),%ecx 324210710Sddmitriev movl %ebp,%edx 324310710Sddmitriev movl %ecx,%ebx 324410710Sddmitriev.L043xts_enc_short: 324510710Sddmitriev addl $96,%eax 324610710Sddmitriev jz .L045xts_enc_done6x 324710710Sddmitriev movdqa %xmm1,%xmm5 324810710Sddmitriev cmpl $32,%eax 324910710Sddmitriev jb .L046xts_enc_one 325010710Sddmitriev pshufd $19,%xmm0,%xmm2 325110710Sddmitriev pxor %xmm0,%xmm0 325210710Sddmitriev paddq %xmm1,%xmm1 325310710Sddmitriev pand %xmm3,%xmm2 325410710Sddmitriev pcmpgtd %xmm1,%xmm0 325510710Sddmitriev pxor %xmm2,%xmm1 325610710Sddmitriev je .L047xts_enc_two 325710710Sddmitriev pshufd $19,%xmm0,%xmm2 325810710Sddmitriev pxor %xmm0,%xmm0 325910710Sddmitriev movdqa %xmm1,%xmm6 326010710Sddmitriev paddq %xmm1,%xmm1 326110710Sddmitriev pand %xmm3,%xmm2 326210710Sddmitriev pcmpgtd %xmm1,%xmm0 326310710Sddmitriev pxor %xmm2,%xmm1 326410710Sddmitriev cmpl $64,%eax 326510710Sddmitriev jb .L048xts_enc_three 326610710Sddmitriev pshufd $19,%xmm0,%xmm2 326710710Sddmitriev pxor %xmm0,%xmm0 326810710Sddmitriev movdqa %xmm1,%xmm7 326910710Sddmitriev paddq %xmm1,%xmm1 327010710Sddmitriev pand %xmm3,%xmm2 327110710Sddmitriev pcmpgtd %xmm1,%xmm0 327210710Sddmitriev pxor %xmm2,%xmm1 327310710Sddmitriev movdqa %xmm5,(%esp) 327410710Sddmitriev movdqa %xmm6,16(%esp) 327510710Sddmitriev je .L049xts_enc_four 327610710Sddmitriev movdqa %xmm7,32(%esp) 327710710Sddmitriev pshufd $19,%xmm0,%xmm7 327810710Sddmitriev movdqa %xmm1,48(%esp) 327910710Sddmitriev paddq %xmm1,%xmm1 328010710Sddmitriev pand %xmm3,%xmm7 328110710Sddmitriev pxor %xmm1,%xmm7 328210710Sddmitriev movdqu (%esi),%xmm2 328310710Sddmitriev movdqu 16(%esi),%xmm3 328410710Sddmitriev movdqu 32(%esi),%xmm4 328510710Sddmitriev pxor (%esp),%xmm2 328610710Sddmitriev movdqu 48(%esi),%xmm5 328710710Sddmitriev pxor 16(%esp),%xmm3 328810710Sddmitriev movdqu 64(%esi),%xmm6 328910710Sddmitriev pxor 32(%esp),%xmm4 329010710Sddmitriev leal 80(%esi),%esi 329110710Sddmitriev pxor 48(%esp),%xmm5 329210710Sddmitriev movdqa %xmm7,64(%esp) 329310710Sddmitriev pxor %xmm7,%xmm6 329410710Sddmitriev call _aesni_encrypt6 329510710Sddmitriev movaps 64(%esp),%xmm1 329610710Sddmitriev xorps (%esp),%xmm2 329710710Sddmitriev xorps 16(%esp),%xmm3 329810710Sddmitriev xorps 32(%esp),%xmm4 329910710Sddmitriev movups %xmm2,(%edi) 330010710Sddmitriev xorps 48(%esp),%xmm5 330110710Sddmitriev movups %xmm3,16(%edi) 330210710Sddmitriev xorps %xmm1,%xmm6 330310710Sddmitriev movups %xmm4,32(%edi) 330410710Sddmitriev movups %xmm5,48(%edi) 330510710Sddmitriev movups %xmm6,64(%edi) 330610710Sddmitriev leal 80(%edi),%edi 330710710Sddmitriev jmp .L050xts_enc_done 330810710Sddmitriev.align 16 330910710Sddmitriev.L046xts_enc_one: 331010710Sddmitriev movups (%esi),%xmm2 331110710Sddmitriev leal 16(%esi),%esi 331210710Sddmitriev xorps %xmm5,%xmm2 331310710Sddmitriev movups (%edx),%xmm0 331410710Sddmitriev movups 16(%edx),%xmm1 331510710Sddmitriev leal 32(%edx),%edx 331610710Sddmitriev xorps %xmm0,%xmm2 331710710Sddmitriev.L051enc1_loop_9: 331810710Sddmitriev.byte 102,15,56,220,209 331910710Sddmitriev decl %ecx 332010710Sddmitriev movups (%edx),%xmm1 332110710Sddmitriev leal 16(%edx),%edx 332210710Sddmitriev jnz .L051enc1_loop_9 332310710Sddmitriev.byte 102,15,56,221,209 332410710Sddmitriev xorps %xmm5,%xmm2 332510710Sddmitriev movups %xmm2,(%edi) 332610710Sddmitriev leal 16(%edi),%edi 332710710Sddmitriev movdqa %xmm5,%xmm1 332810710Sddmitriev jmp .L050xts_enc_done 332910710Sddmitriev.align 16 333010710Sddmitriev.L047xts_enc_two: 333110710Sddmitriev movaps %xmm1,%xmm6 333210710Sddmitriev movups (%esi),%xmm2 333310710Sddmitriev movups 16(%esi),%xmm3 333410710Sddmitriev leal 32(%esi),%esi 333510710Sddmitriev xorps %xmm5,%xmm2 333610710Sddmitriev xorps %xmm6,%xmm3 333710710Sddmitriev xorps %xmm4,%xmm4 333810710Sddmitriev call _aesni_encrypt3 333910710Sddmitriev xorps %xmm5,%xmm2 334010710Sddmitriev xorps %xmm6,%xmm3 334110710Sddmitriev movups %xmm2,(%edi) 334210710Sddmitriev movups %xmm3,16(%edi) 334310710Sddmitriev leal 32(%edi),%edi 334410710Sddmitriev movdqa %xmm6,%xmm1 334510710Sddmitriev jmp .L050xts_enc_done 334610710Sddmitriev.align 16 334710710Sddmitriev.L048xts_enc_three: 334810710Sddmitriev movaps %xmm1,%xmm7 334910710Sddmitriev movups (%esi),%xmm2 335010710Sddmitriev movups 16(%esi),%xmm3 335110710Sddmitriev movups 32(%esi),%xmm4 335210710Sddmitriev leal 48(%esi),%esi 335310710Sddmitriev xorps %xmm5,%xmm2 335410710Sddmitriev xorps %xmm6,%xmm3 335510710Sddmitriev xorps %xmm7,%xmm4 335610710Sddmitriev call _aesni_encrypt3 335710710Sddmitriev xorps %xmm5,%xmm2 335810710Sddmitriev xorps %xmm6,%xmm3 335910710Sddmitriev xorps %xmm7,%xmm4 336010710Sddmitriev movups %xmm2,(%edi) 336110710Sddmitriev movups %xmm3,16(%edi) 336210710Sddmitriev movups %xmm4,32(%edi) 336310710Sddmitriev leal 48(%edi),%edi 336410710Sddmitriev movdqa %xmm7,%xmm1 336510710Sddmitriev jmp .L050xts_enc_done 336610710Sddmitriev.align 16 336710710Sddmitriev.L049xts_enc_four: 336810710Sddmitriev movaps %xmm1,%xmm6 336910710Sddmitriev movups (%esi),%xmm2 337010710Sddmitriev movups 16(%esi),%xmm3 337110710Sddmitriev movups 32(%esi),%xmm4 337210710Sddmitriev xorps (%esp),%xmm2 337310710Sddmitriev movups 48(%esi),%xmm5 337410710Sddmitriev leal 64(%esi),%esi 337510710Sddmitriev xorps 16(%esp),%xmm3 337610710Sddmitriev xorps %xmm7,%xmm4 337710710Sddmitriev xorps %xmm6,%xmm5 337810710Sddmitriev call _aesni_encrypt4 337910710Sddmitriev xorps (%esp),%xmm2 338010710Sddmitriev xorps 16(%esp),%xmm3 338110710Sddmitriev xorps %xmm7,%xmm4 338210710Sddmitriev movups %xmm2,(%edi) 338310710Sddmitriev xorps %xmm6,%xmm5 338410710Sddmitriev movups %xmm3,16(%edi) 338510710Sddmitriev movups %xmm4,32(%edi) 338610710Sddmitriev movups %xmm5,48(%edi) 338710710Sddmitriev leal 64(%edi),%edi 338810710Sddmitriev movdqa %xmm6,%xmm1 338910710Sddmitriev jmp .L050xts_enc_done 339010710Sddmitriev.align 16 339110710Sddmitriev.L045xts_enc_done6x: 339210710Sddmitriev movl 112(%esp),%eax 339310710Sddmitriev andl $15,%eax 339410710Sddmitriev jz .L052xts_enc_ret 339510710Sddmitriev movdqa %xmm1,%xmm5 339610710Sddmitriev movl %eax,112(%esp) 339710710Sddmitriev jmp .L053xts_enc_steal 339810710Sddmitriev.align 16 339910710Sddmitriev.L050xts_enc_done: 340010710Sddmitriev movl 112(%esp),%eax 340110710Sddmitriev pxor %xmm0,%xmm0 340210710Sddmitriev andl $15,%eax 340310710Sddmitriev jz .L052xts_enc_ret 340410710Sddmitriev pcmpgtd %xmm1,%xmm0 340510710Sddmitriev movl %eax,112(%esp) 340610710Sddmitriev pshufd $19,%xmm0,%xmm5 340710710Sddmitriev paddq %xmm1,%xmm1 340810710Sddmitriev pand 96(%esp),%xmm5 340910710Sddmitriev pxor %xmm1,%xmm5 341010710Sddmitriev.L053xts_enc_steal: 341110710Sddmitriev movzbl (%esi),%ecx 341210710Sddmitriev movzbl -16(%edi),%edx 341310710Sddmitriev leal 1(%esi),%esi 341410710Sddmitriev movb %cl,-16(%edi) 341510710Sddmitriev movb %dl,(%edi) 341610710Sddmitriev leal 1(%edi),%edi 341710710Sddmitriev subl $1,%eax 341810710Sddmitriev jnz .L053xts_enc_steal 341910710Sddmitriev subl 112(%esp),%edi 342010710Sddmitriev movl %ebp,%edx 342110710Sddmitriev movl %ebx,%ecx 342210710Sddmitriev movups -16(%edi),%xmm2 342310710Sddmitriev xorps %xmm5,%xmm2 342410710Sddmitriev movups (%edx),%xmm0 342510710Sddmitriev movups 16(%edx),%xmm1 342610710Sddmitriev leal 32(%edx),%edx 342710710Sddmitriev xorps %xmm0,%xmm2 342810710Sddmitriev.L054enc1_loop_10: 342910710Sddmitriev.byte 102,15,56,220,209 343010710Sddmitriev decl %ecx 343110710Sddmitriev movups (%edx),%xmm1 343210710Sddmitriev leal 16(%edx),%edx 343310710Sddmitriev jnz .L054enc1_loop_10 343410710Sddmitriev.byte 102,15,56,221,209 343510710Sddmitriev xorps %xmm5,%xmm2 343610710Sddmitriev movups %xmm2,-16(%edi) 343710710Sddmitriev.L052xts_enc_ret: 343810710Sddmitriev movl 116(%esp),%esp 343910710Sddmitriev popl %edi 344010710Sddmitriev popl %esi 344110710Sddmitriev popl %ebx 344210710Sddmitriev popl %ebp 344310710Sddmitriev ret 344410710Sddmitriev.size aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin 344510710Sddmitriev.globl aesni_xts_decrypt 344610710Sddmitriev.type aesni_xts_decrypt,@function 344710710Sddmitriev.align 16 344810710Sddmitrievaesni_xts_decrypt: 344910710Sddmitriev.L_aesni_xts_decrypt_begin: 345010710Sddmitriev pushl %ebp 345110710Sddmitriev pushl %ebx 345210710Sddmitriev pushl %esi 345310710Sddmitriev pushl %edi 345410710Sddmitriev movl 36(%esp),%edx 345510710Sddmitriev movl 40(%esp),%esi 345610710Sddmitriev movl 240(%edx),%ecx 345710710Sddmitriev movups (%esi),%xmm2 345810710Sddmitriev movups (%edx),%xmm0 345910710Sddmitriev movups 16(%edx),%xmm1 346010710Sddmitriev leal 32(%edx),%edx 346110710Sddmitriev xorps %xmm0,%xmm2 346210710Sddmitriev.L055enc1_loop_11: 346310710Sddmitriev.byte 102,15,56,220,209 346410710Sddmitriev decl %ecx 346510710Sddmitriev movups (%edx),%xmm1 346610710Sddmitriev leal 16(%edx),%edx 346710710Sddmitriev jnz .L055enc1_loop_11 346810710Sddmitriev.byte 102,15,56,221,209 346910710Sddmitriev movl 20(%esp),%esi 347010710Sddmitriev movl 24(%esp),%edi 347110710Sddmitriev movl 28(%esp),%eax 347210710Sddmitriev movl 32(%esp),%edx 347310710Sddmitriev movl %esp,%ebp 347410710Sddmitriev subl $120,%esp 347510710Sddmitriev andl $-16,%esp 347610710Sddmitriev xorl %ebx,%ebx 347710710Sddmitriev testl $15,%eax 347810710Sddmitriev setnz %bl 347910710Sddmitriev shll $4,%ebx 348010710Sddmitriev subl %ebx,%eax 348110710Sddmitriev movl $135,96(%esp) 348210710Sddmitriev movl $0,100(%esp) 348310710Sddmitriev movl $1,104(%esp) 348410710Sddmitriev movl $0,108(%esp) 348510710Sddmitriev movl %eax,112(%esp) 348610710Sddmitriev movl %ebp,116(%esp) 348710710Sddmitriev movl 240(%edx),%ecx 348810710Sddmitriev movl %edx,%ebp 348910710Sddmitriev movl %ecx,%ebx 349010710Sddmitriev movdqa %xmm2,%xmm1 349110710Sddmitriev pxor %xmm0,%xmm0 349210710Sddmitriev movdqa 96(%esp),%xmm3 349310710Sddmitriev pcmpgtd %xmm1,%xmm0 349410710Sddmitriev andl $-16,%eax 349510710Sddmitriev subl $96,%eax 349610710Sddmitriev jc .L056xts_dec_short 349710710Sddmitriev shrl $1,%ecx 349810710Sddmitriev movl %ecx,%ebx 349910710Sddmitriev jmp .L057xts_dec_loop6 350010710Sddmitriev.align 16 350110710Sddmitriev.L057xts_dec_loop6: 350210710Sddmitriev pshufd $19,%xmm0,%xmm2 350310710Sddmitriev pxor %xmm0,%xmm0 350410710Sddmitriev movdqa %xmm1,(%esp) 350510710Sddmitriev paddq %xmm1,%xmm1 350610710Sddmitriev pand %xmm3,%xmm2 350710710Sddmitriev pcmpgtd %xmm1,%xmm0 350810710Sddmitriev pxor %xmm2,%xmm1 350910710Sddmitriev pshufd $19,%xmm0,%xmm2 351010710Sddmitriev pxor %xmm0,%xmm0 351110710Sddmitriev movdqa %xmm1,16(%esp) 351210710Sddmitriev paddq %xmm1,%xmm1 351310710Sddmitriev pand %xmm3,%xmm2 351410710Sddmitriev pcmpgtd %xmm1,%xmm0 351510710Sddmitriev pxor %xmm2,%xmm1 351610710Sddmitriev pshufd $19,%xmm0,%xmm2 351710710Sddmitriev pxor %xmm0,%xmm0 351810710Sddmitriev movdqa %xmm1,32(%esp) 351910710Sddmitriev paddq %xmm1,%xmm1 352010710Sddmitriev pand %xmm3,%xmm2 352110710Sddmitriev pcmpgtd %xmm1,%xmm0 352210710Sddmitriev pxor %xmm2,%xmm1 352310710Sddmitriev pshufd $19,%xmm0,%xmm2 352410710Sddmitriev pxor %xmm0,%xmm0 352510710Sddmitriev movdqa %xmm1,48(%esp) 352610710Sddmitriev paddq %xmm1,%xmm1 352710710Sddmitriev pand %xmm3,%xmm2 352810710Sddmitriev pcmpgtd %xmm1,%xmm0 352910710Sddmitriev pxor %xmm2,%xmm1 353010710Sddmitriev pshufd $19,%xmm0,%xmm7 353110710Sddmitriev movdqa %xmm1,64(%esp) 353210710Sddmitriev paddq %xmm1,%xmm1 353310710Sddmitriev movups (%ebp),%xmm0 353410710Sddmitriev pand %xmm3,%xmm7 353510710Sddmitriev movups (%esi),%xmm2 353610710Sddmitriev pxor %xmm1,%xmm7 353710710Sddmitriev movdqu 16(%esi),%xmm3 353810710Sddmitriev xorps %xmm0,%xmm2 353910710Sddmitriev movdqu 32(%esi),%xmm4 354010710Sddmitriev pxor %xmm0,%xmm3 354110710Sddmitriev movdqu 48(%esi),%xmm5 354210710Sddmitriev pxor %xmm0,%xmm4 354310710Sddmitriev movdqu 64(%esi),%xmm6 354410710Sddmitriev pxor %xmm0,%xmm5 354510710Sddmitriev movdqu 80(%esi),%xmm1 354610710Sddmitriev pxor %xmm0,%xmm6 354710710Sddmitriev leal 96(%esi),%esi 354810710Sddmitriev pxor (%esp),%xmm2 354910710Sddmitriev movdqa %xmm7,80(%esp) 355010710Sddmitriev pxor %xmm1,%xmm7 355110710Sddmitriev movups 16(%ebp),%xmm1 355210710Sddmitriev leal 32(%ebp),%edx 355310710Sddmitriev pxor 16(%esp),%xmm3 355410710Sddmitriev.byte 102,15,56,222,209 355510710Sddmitriev pxor 32(%esp),%xmm4 355610710Sddmitriev.byte 102,15,56,222,217 355710710Sddmitriev pxor 48(%esp),%xmm5 355810710Sddmitriev decl %ecx 355910710Sddmitriev.byte 102,15,56,222,225 356010710Sddmitriev pxor 64(%esp),%xmm6 356110710Sddmitriev.byte 102,15,56,222,233 356210710Sddmitriev pxor %xmm0,%xmm7 356310710Sddmitriev.byte 102,15,56,222,241 356410710Sddmitriev movups (%edx),%xmm0 356510710Sddmitriev.byte 102,15,56,222,249 356610710Sddmitriev call .L_aesni_decrypt6_enter 356710710Sddmitriev movdqa 80(%esp),%xmm1 356810710Sddmitriev pxor %xmm0,%xmm0 356910710Sddmitriev xorps (%esp),%xmm2 357010710Sddmitriev pcmpgtd %xmm1,%xmm0 357110710Sddmitriev xorps 16(%esp),%xmm3 357210710Sddmitriev movups %xmm2,(%edi) 357310710Sddmitriev xorps 32(%esp),%xmm4 357410710Sddmitriev movups %xmm3,16(%edi) 357510710Sddmitriev xorps 48(%esp),%xmm5 357610710Sddmitriev movups %xmm4,32(%edi) 357710710Sddmitriev xorps 64(%esp),%xmm6 357810710Sddmitriev movups %xmm5,48(%edi) 357910710Sddmitriev xorps %xmm1,%xmm7 358010710Sddmitriev movups %xmm6,64(%edi) 358110710Sddmitriev pshufd $19,%xmm0,%xmm2 358210710Sddmitriev movups %xmm7,80(%edi) 358310710Sddmitriev leal 96(%edi),%edi 358410710Sddmitriev movdqa 96(%esp),%xmm3 358510710Sddmitriev pxor %xmm0,%xmm0 358610710Sddmitriev paddq %xmm1,%xmm1 358710710Sddmitriev pand %xmm3,%xmm2 358810710Sddmitriev pcmpgtd %xmm1,%xmm0 358910710Sddmitriev movl %ebx,%ecx 359010710Sddmitriev pxor %xmm2,%xmm1 359110710Sddmitriev subl $96,%eax 359210710Sddmitriev jnc .L057xts_dec_loop6 359310710Sddmitriev leal 1(,%ecx,2),%ecx 359410710Sddmitriev movl %ebp,%edx 359510710Sddmitriev movl %ecx,%ebx 359610710Sddmitriev.L056xts_dec_short: 359710710Sddmitriev addl $96,%eax 359810710Sddmitriev jz .L058xts_dec_done6x 359910710Sddmitriev movdqa %xmm1,%xmm5 360010710Sddmitriev cmpl $32,%eax 360110710Sddmitriev jb .L059xts_dec_one 360210710Sddmitriev pshufd $19,%xmm0,%xmm2 360310710Sddmitriev pxor %xmm0,%xmm0 360410710Sddmitriev paddq %xmm1,%xmm1 360510710Sddmitriev pand %xmm3,%xmm2 360610710Sddmitriev pcmpgtd %xmm1,%xmm0 360710710Sddmitriev pxor %xmm2,%xmm1 360810710Sddmitriev je .L060xts_dec_two 360910710Sddmitriev pshufd $19,%xmm0,%xmm2 361010710Sddmitriev pxor %xmm0,%xmm0 361110710Sddmitriev movdqa %xmm1,%xmm6 361210710Sddmitriev paddq %xmm1,%xmm1 361310710Sddmitriev pand %xmm3,%xmm2 361410710Sddmitriev pcmpgtd %xmm1,%xmm0 361510710Sddmitriev pxor %xmm2,%xmm1 361610710Sddmitriev cmpl $64,%eax 361710710Sddmitriev jb .L061xts_dec_three 361810710Sddmitriev pshufd $19,%xmm0,%xmm2 361910710Sddmitriev pxor %xmm0,%xmm0 362010710Sddmitriev movdqa %xmm1,%xmm7 362110710Sddmitriev paddq %xmm1,%xmm1 362210710Sddmitriev pand %xmm3,%xmm2 362310710Sddmitriev pcmpgtd %xmm1,%xmm0 362410710Sddmitriev pxor %xmm2,%xmm1 362510710Sddmitriev movdqa %xmm5,(%esp) 362610710Sddmitriev movdqa %xmm6,16(%esp) 362710710Sddmitriev je .L062xts_dec_four 362810710Sddmitriev movdqa %xmm7,32(%esp) 362910710Sddmitriev pshufd $19,%xmm0,%xmm7 363010710Sddmitriev movdqa %xmm1,48(%esp) 363110710Sddmitriev paddq %xmm1,%xmm1 363210710Sddmitriev pand %xmm3,%xmm7 363310710Sddmitriev pxor %xmm1,%xmm7 363410710Sddmitriev movdqu (%esi),%xmm2 363510710Sddmitriev movdqu 16(%esi),%xmm3 363610710Sddmitriev movdqu 32(%esi),%xmm4 363710710Sddmitriev pxor (%esp),%xmm2 363810710Sddmitriev movdqu 48(%esi),%xmm5 363910710Sddmitriev pxor 16(%esp),%xmm3 364010710Sddmitriev movdqu 64(%esi),%xmm6 364110710Sddmitriev pxor 32(%esp),%xmm4 364210710Sddmitriev leal 80(%esi),%esi 364310710Sddmitriev pxor 48(%esp),%xmm5 364410710Sddmitriev movdqa %xmm7,64(%esp) 364510710Sddmitriev pxor %xmm7,%xmm6 364610710Sddmitriev call _aesni_decrypt6 364710710Sddmitriev movaps 64(%esp),%xmm1 364810710Sddmitriev xorps (%esp),%xmm2 364910710Sddmitriev xorps 16(%esp),%xmm3 365010710Sddmitriev xorps 32(%esp),%xmm4 365110710Sddmitriev movups %xmm2,(%edi) 365210710Sddmitriev xorps 48(%esp),%xmm5 365310710Sddmitriev movups %xmm3,16(%edi) 365410710Sddmitriev xorps %xmm1,%xmm6 365510710Sddmitriev movups %xmm4,32(%edi) 365610710Sddmitriev movups %xmm5,48(%edi) 365710710Sddmitriev movups %xmm6,64(%edi) 365810710Sddmitriev leal 80(%edi),%edi 365910710Sddmitriev jmp .L063xts_dec_done 366010710Sddmitriev.align 16 366110710Sddmitriev.L059xts_dec_one: 366210710Sddmitriev movups (%esi),%xmm2 366310710Sddmitriev leal 16(%esi),%esi 366410710Sddmitriev xorps %xmm5,%xmm2 366510710Sddmitriev movups (%edx),%xmm0 366610710Sddmitriev movups 16(%edx),%xmm1 366710710Sddmitriev leal 32(%edx),%edx 366810710Sddmitriev xorps %xmm0,%xmm2 366910710Sddmitriev.L064dec1_loop_12: 367010710Sddmitriev.byte 102,15,56,222,209 367110710Sddmitriev decl %ecx 367210710Sddmitriev movups (%edx),%xmm1 367310710Sddmitriev leal 16(%edx),%edx 367410710Sddmitriev jnz .L064dec1_loop_12 367510710Sddmitriev.byte 102,15,56,223,209 367610710Sddmitriev xorps %xmm5,%xmm2 367710710Sddmitriev movups %xmm2,(%edi) 367810710Sddmitriev leal 16(%edi),%edi 367910710Sddmitriev movdqa %xmm5,%xmm1 368010710Sddmitriev jmp .L063xts_dec_done 368110710Sddmitriev.align 16 368210710Sddmitriev.L060xts_dec_two: 368310710Sddmitriev movaps %xmm1,%xmm6 368410710Sddmitriev movups (%esi),%xmm2 368510710Sddmitriev movups 16(%esi),%xmm3 368610710Sddmitriev leal 32(%esi),%esi 368710710Sddmitriev xorps %xmm5,%xmm2 368810710Sddmitriev xorps %xmm6,%xmm3 368910710Sddmitriev call _aesni_decrypt3 369010710Sddmitriev xorps %xmm5,%xmm2 369110710Sddmitriev xorps %xmm6,%xmm3 369210710Sddmitriev movups %xmm2,(%edi) 369310710Sddmitriev movups %xmm3,16(%edi) 369410710Sddmitriev leal 32(%edi),%edi 369510710Sddmitriev movdqa %xmm6,%xmm1 369610710Sddmitriev jmp .L063xts_dec_done 369710710Sddmitriev.align 16 369810710Sddmitriev.L061xts_dec_three: 369910710Sddmitriev movaps %xmm1,%xmm7 370010710Sddmitriev movups (%esi),%xmm2 370110710Sddmitriev movups 16(%esi),%xmm3 370210710Sddmitriev movups 32(%esi),%xmm4 370310710Sddmitriev leal 48(%esi),%esi 370410710Sddmitriev xorps %xmm5,%xmm2 370510710Sddmitriev xorps %xmm6,%xmm3 370610710Sddmitriev xorps %xmm7,%xmm4 370710710Sddmitriev call _aesni_decrypt3 370810710Sddmitriev xorps %xmm5,%xmm2 370910710Sddmitriev xorps %xmm6,%xmm3 371010710Sddmitriev xorps %xmm7,%xmm4 371110710Sddmitriev movups %xmm2,(%edi) 371210710Sddmitriev movups %xmm3,16(%edi) 371310710Sddmitriev movups %xmm4,32(%edi) 371410710Sddmitriev leal 48(%edi),%edi 371510710Sddmitriev movdqa %xmm7,%xmm1 371610710Sddmitriev jmp .L063xts_dec_done 371710710Sddmitriev.align 16 371810710Sddmitriev.L062xts_dec_four: 371910710Sddmitriev movaps %xmm1,%xmm6 372010710Sddmitriev movups (%esi),%xmm2 372110710Sddmitriev movups 16(%esi),%xmm3 372210710Sddmitriev movups 32(%esi),%xmm4 372310710Sddmitriev xorps (%esp),%xmm2 372410710Sddmitriev movups 48(%esi),%xmm5 372510710Sddmitriev leal 64(%esi),%esi 372610710Sddmitriev xorps 16(%esp),%xmm3 372710710Sddmitriev xorps %xmm7,%xmm4 372810710Sddmitriev xorps %xmm6,%xmm5 372910710Sddmitriev call _aesni_decrypt4 373010710Sddmitriev xorps (%esp),%xmm2 373110710Sddmitriev xorps 16(%esp),%xmm3 373210710Sddmitriev xorps %xmm7,%xmm4 373310710Sddmitriev movups %xmm2,(%edi) 373410710Sddmitriev xorps %xmm6,%xmm5 373510710Sddmitriev movups %xmm3,16(%edi) 373610710Sddmitriev movups %xmm4,32(%edi) 373710710Sddmitriev movups %xmm5,48(%edi) 373810710Sddmitriev leal 64(%edi),%edi 373910710Sddmitriev movdqa %xmm6,%xmm1 374010710Sddmitriev jmp .L063xts_dec_done 374110710Sddmitriev.align 16 374210710Sddmitriev.L058xts_dec_done6x: 374310710Sddmitriev movl 112(%esp),%eax 374410710Sddmitriev andl $15,%eax 374510710Sddmitriev jz .L065xts_dec_ret 374610710Sddmitriev movl %eax,112(%esp) 374710710Sddmitriev jmp .L066xts_dec_only_one_more 374810710Sddmitriev.align 16 374910710Sddmitriev.L063xts_dec_done: 375010710Sddmitriev movl 112(%esp),%eax 375110710Sddmitriev pxor %xmm0,%xmm0 375210710Sddmitriev andl $15,%eax 375310710Sddmitriev jz .L065xts_dec_ret 375410710Sddmitriev pcmpgtd %xmm1,%xmm0 375510710Sddmitriev movl %eax,112(%esp) 375610710Sddmitriev pshufd $19,%xmm0,%xmm2 375710710Sddmitriev pxor %xmm0,%xmm0 375810710Sddmitriev movdqa 96(%esp),%xmm3 375910710Sddmitriev paddq %xmm1,%xmm1 376010710Sddmitriev pand %xmm3,%xmm2 376110710Sddmitriev pcmpgtd %xmm1,%xmm0 376210710Sddmitriev pxor %xmm2,%xmm1 376310710Sddmitriev.L066xts_dec_only_one_more: 376410710Sddmitriev pshufd $19,%xmm0,%xmm5 376510710Sddmitriev movdqa %xmm1,%xmm6 376610710Sddmitriev paddq %xmm1,%xmm1 376710710Sddmitriev pand %xmm3,%xmm5 376810710Sddmitriev pxor %xmm1,%xmm5 376910710Sddmitriev movl %ebp,%edx 377010710Sddmitriev movl %ebx,%ecx 377110710Sddmitriev movups (%esi),%xmm2 377210710Sddmitriev xorps %xmm5,%xmm2 377310710Sddmitriev movups (%edx),%xmm0 377410710Sddmitriev movups 16(%edx),%xmm1 377510710Sddmitriev leal 32(%edx),%edx 377610710Sddmitriev xorps %xmm0,%xmm2 377710710Sddmitriev.L067dec1_loop_13: 377810710Sddmitriev.byte 102,15,56,222,209 377910710Sddmitriev decl %ecx 378010710Sddmitriev movups (%edx),%xmm1 378110710Sddmitriev leal 16(%edx),%edx 378210710Sddmitriev jnz .L067dec1_loop_13 378310710Sddmitriev.byte 102,15,56,223,209 378410710Sddmitriev xorps %xmm5,%xmm2 378510710Sddmitriev movups %xmm2,(%edi) 378610710Sddmitriev.L068xts_dec_steal: 378710710Sddmitriev movzbl 16(%esi),%ecx 378810710Sddmitriev movzbl (%edi),%edx 378910710Sddmitriev leal 1(%esi),%esi 379010710Sddmitriev movb %cl,(%edi) 379110710Sddmitriev movb %dl,16(%edi) 379210710Sddmitriev leal 1(%edi),%edi 379310710Sddmitriev subl $1,%eax 379410710Sddmitriev jnz .L068xts_dec_steal 379510710Sddmitriev subl 112(%esp),%edi 379610710Sddmitriev movl %ebp,%edx 379710710Sddmitriev movl %ebx,%ecx 379810710Sddmitriev movups (%edi),%xmm2 379910710Sddmitriev xorps %xmm6,%xmm2 380010710Sddmitriev movups (%edx),%xmm0 380110710Sddmitriev movups 16(%edx),%xmm1 380210710Sddmitriev leal 32(%edx),%edx 380310710Sddmitriev xorps %xmm0,%xmm2 380410710Sddmitriev.L069dec1_loop_14: 380510710Sddmitriev.byte 102,15,56,222,209 380610710Sddmitriev decl %ecx 380710710Sddmitriev movups (%edx),%xmm1 380810710Sddmitriev leal 16(%edx),%edx 380910710Sddmitriev jnz .L069dec1_loop_14 381010710Sddmitriev.byte 102,15,56,223,209 381110710Sddmitriev xorps %xmm6,%xmm2 381210710Sddmitriev movups %xmm2,(%edi) 381310710Sddmitriev.L065xts_dec_ret: 381410710Sddmitriev movl 116(%esp),%esp 381510710Sddmitriev popl %edi 381610710Sddmitriev popl %esi 381710710Sddmitriev popl %ebx 381810710Sddmitriev popl %ebp 381910710Sddmitriev ret 382010710Sddmitriev.size aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin 382110710Sddmitriev.globl aesni_cbc_encrypt 382210710Sddmitriev.type aesni_cbc_encrypt,@function 382310710Sddmitriev.align 16 382410710Sddmitrievaesni_cbc_encrypt: 382510710Sddmitriev.L_aesni_cbc_encrypt_begin: 382610710Sddmitriev pushl %ebp 382710710Sddmitriev pushl %ebx 382810710Sddmitriev pushl %esi 382910710Sddmitriev pushl %edi 383010710Sddmitriev movl 20(%esp),%esi 383110710Sddmitriev movl %esp,%ebx 383210710Sddmitriev movl 24(%esp),%edi 383310710Sddmitriev subl $24,%ebx 383410710Sddmitriev movl 28(%esp),%eax 383510710Sddmitriev andl $-16,%ebx 383610710Sddmitriev movl 32(%esp),%edx 383710710Sddmitriev movl 36(%esp),%ebp 383810710Sddmitriev testl %eax,%eax 383910710Sddmitriev jz .L070cbc_abort 384010710Sddmitriev cmpl $0,40(%esp) 384110710Sddmitriev xchgl %esp,%ebx 384210710Sddmitriev movups (%ebp),%xmm7 384310710Sddmitriev movl 240(%edx),%ecx 384410710Sddmitriev movl %edx,%ebp 384510710Sddmitriev movl %ebx,16(%esp) 384610710Sddmitriev movl %ecx,%ebx 384710710Sddmitriev je .L071cbc_decrypt 384810710Sddmitriev movaps %xmm7,%xmm2 384910710Sddmitriev cmpl $16,%eax 385010710Sddmitriev jb .L072cbc_enc_tail 385110710Sddmitriev subl $16,%eax 385210710Sddmitriev jmp .L073cbc_enc_loop 385310710Sddmitriev.align 16 385410710Sddmitriev.L073cbc_enc_loop: 385510710Sddmitriev movups (%esi),%xmm7 385610710Sddmitriev leal 16(%esi),%esi 385710710Sddmitriev movups (%edx),%xmm0 385810710Sddmitriev movups 16(%edx),%xmm1 385910710Sddmitriev xorps %xmm0,%xmm7 386010710Sddmitriev leal 32(%edx),%edx 386110710Sddmitriev xorps %xmm7,%xmm2 386210710Sddmitriev.L074enc1_loop_15: 386310710Sddmitriev.byte 102,15,56,220,209 386410710Sddmitriev decl %ecx 386510710Sddmitriev movups (%edx),%xmm1 386610710Sddmitriev leal 16(%edx),%edx 386710710Sddmitriev jnz .L074enc1_loop_15 386810710Sddmitriev.byte 102,15,56,221,209 386910710Sddmitriev movl %ebx,%ecx 387010710Sddmitriev movl %ebp,%edx 387110710Sddmitriev movups %xmm2,(%edi) 387210710Sddmitriev leal 16(%edi),%edi 387310710Sddmitriev subl $16,%eax 387410710Sddmitriev jnc .L073cbc_enc_loop 387510710Sddmitriev addl $16,%eax 387610710Sddmitriev jnz .L072cbc_enc_tail 387710710Sddmitriev movaps %xmm2,%xmm7 387810710Sddmitriev jmp .L075cbc_ret 387910710Sddmitriev.L072cbc_enc_tail: 388010710Sddmitriev movl %eax,%ecx 388110710Sddmitriev.long 2767451785 388210710Sddmitriev movl $16,%ecx 388310710Sddmitriev subl %eax,%ecx 388410710Sddmitriev xorl %eax,%eax 388510710Sddmitriev.long 2868115081 388610710Sddmitriev leal -16(%edi),%edi 388710710Sddmitriev movl %ebx,%ecx 388810710Sddmitriev movl %edi,%esi 388910710Sddmitriev movl %ebp,%edx 389010710Sddmitriev jmp .L073cbc_enc_loop 389110710Sddmitriev.align 16 389210710Sddmitriev.L071cbc_decrypt: 389310710Sddmitriev cmpl $80,%eax 389410710Sddmitriev jbe .L076cbc_dec_tail 389510710Sddmitriev movaps %xmm7,(%esp) 389610710Sddmitriev subl $80,%eax 389710710Sddmitriev jmp .L077cbc_dec_loop6_enter 389810710Sddmitriev.align 16 389910710Sddmitriev.L078cbc_dec_loop6: 390010710Sddmitriev movaps %xmm0,(%esp) 390110710Sddmitriev movups %xmm7,(%edi) 390210710Sddmitriev leal 16(%edi),%edi 390310710Sddmitriev.L077cbc_dec_loop6_enter: 390410710Sddmitriev movdqu (%esi),%xmm2 390510710Sddmitriev movdqu 16(%esi),%xmm3 390610710Sddmitriev movdqu 32(%esi),%xmm4 390710710Sddmitriev movdqu 48(%esi),%xmm5 390810710Sddmitriev movdqu 64(%esi),%xmm6 390910710Sddmitriev movdqu 80(%esi),%xmm7 391010710Sddmitriev call _aesni_decrypt6 391110710Sddmitriev movups (%esi),%xmm1 391210710Sddmitriev movups 16(%esi),%xmm0 391310710Sddmitriev xorps (%esp),%xmm2 391410710Sddmitriev xorps %xmm1,%xmm3 391510710Sddmitriev movups 32(%esi),%xmm1 391610710Sddmitriev xorps %xmm0,%xmm4 391710710Sddmitriev movups 48(%esi),%xmm0 391810710Sddmitriev xorps %xmm1,%xmm5 391910710Sddmitriev movups 64(%esi),%xmm1 392010710Sddmitriev xorps %xmm0,%xmm6 392110710Sddmitriev movups 80(%esi),%xmm0 392210710Sddmitriev xorps %xmm1,%xmm7 392310710Sddmitriev movups %xmm2,(%edi) 392410710Sddmitriev movups %xmm3,16(%edi) 392510710Sddmitriev leal 96(%esi),%esi 392610710Sddmitriev movups %xmm4,32(%edi) 392710710Sddmitriev movl %ebx,%ecx 392810710Sddmitriev movups %xmm5,48(%edi) 392910710Sddmitriev movl %ebp,%edx 393010710Sddmitriev movups %xmm6,64(%edi) 393110710Sddmitriev leal 80(%edi),%edi 393210710Sddmitriev subl $96,%eax 393310710Sddmitriev ja .L078cbc_dec_loop6 393410710Sddmitriev movaps %xmm7,%xmm2 393510710Sddmitriev movaps %xmm0,%xmm7 393610710Sddmitriev addl $80,%eax 393710710Sddmitriev jle .L079cbc_dec_tail_collected 393810710Sddmitriev movups %xmm2,(%edi) 393910710Sddmitriev leal 16(%edi),%edi 394010710Sddmitriev.L076cbc_dec_tail: 394110710Sddmitriev movups (%esi),%xmm2 394210710Sddmitriev movaps %xmm2,%xmm6 394310710Sddmitriev cmpl $16,%eax 394410710Sddmitriev jbe .L080cbc_dec_one 394510710Sddmitriev movups 16(%esi),%xmm3 394610710Sddmitriev movaps %xmm3,%xmm5 394710710Sddmitriev cmpl $32,%eax 394810710Sddmitriev jbe .L081cbc_dec_two 394910710Sddmitriev movups 32(%esi),%xmm4 395010710Sddmitriev cmpl $48,%eax 395110710Sddmitriev jbe .L082cbc_dec_three 395210710Sddmitriev movups 48(%esi),%xmm5 395310710Sddmitriev cmpl $64,%eax 395410710Sddmitriev jbe .L083cbc_dec_four 395510710Sddmitriev movups 64(%esi),%xmm6 395610710Sddmitriev movaps %xmm7,(%esp) 395710710Sddmitriev movups (%esi),%xmm2 395810710Sddmitriev xorps %xmm7,%xmm7 395910710Sddmitriev call _aesni_decrypt6 396010710Sddmitriev movups (%esi),%xmm1 396110710Sddmitriev movups 16(%esi),%xmm0 396210710Sddmitriev xorps (%esp),%xmm2 396310710Sddmitriev xorps %xmm1,%xmm3 396410710Sddmitriev movups 32(%esi),%xmm1 396510710Sddmitriev xorps %xmm0,%xmm4 396610710Sddmitriev movups 48(%esi),%xmm0 396710710Sddmitriev xorps %xmm1,%xmm5 396810710Sddmitriev movups 64(%esi),%xmm7 396910710Sddmitriev xorps %xmm0,%xmm6 397010710Sddmitriev movups %xmm2,(%edi) 397110710Sddmitriev movups %xmm3,16(%edi) 397210710Sddmitriev movups %xmm4,32(%edi) 397310710Sddmitriev movups %xmm5,48(%edi) 397410710Sddmitriev leal 64(%edi),%edi 397510710Sddmitriev movaps %xmm6,%xmm2 397610710Sddmitriev subl $80,%eax 397710710Sddmitriev jmp .L079cbc_dec_tail_collected 397810710Sddmitriev.align 16 397910710Sddmitriev.L080cbc_dec_one: 398010710Sddmitriev movups (%edx),%xmm0 398110710Sddmitriev movups 16(%edx),%xmm1 398210710Sddmitriev leal 32(%edx),%edx 398310710Sddmitriev xorps %xmm0,%xmm2 398410710Sddmitriev.L084dec1_loop_16: 398510710Sddmitriev.byte 102,15,56,222,209 398610710Sddmitriev decl %ecx 398710710Sddmitriev movups (%edx),%xmm1 398810710Sddmitriev leal 16(%edx),%edx 398910710Sddmitriev jnz .L084dec1_loop_16 399010710Sddmitriev.byte 102,15,56,223,209 399110710Sddmitriev xorps %xmm7,%xmm2 399210710Sddmitriev movaps %xmm6,%xmm7 399310710Sddmitriev subl $16,%eax 399410710Sddmitriev jmp .L079cbc_dec_tail_collected 399510710Sddmitriev.align 16 399610710Sddmitriev.L081cbc_dec_two: 399710710Sddmitriev xorps %xmm4,%xmm4 399810710Sddmitriev call _aesni_decrypt3 399910710Sddmitriev xorps %xmm7,%xmm2 400010710Sddmitriev xorps %xmm6,%xmm3 400110710Sddmitriev movups %xmm2,(%edi) 400210710Sddmitriev movaps %xmm3,%xmm2 400310710Sddmitriev leal 16(%edi),%edi 400410710Sddmitriev movaps %xmm5,%xmm7 400510710Sddmitriev subl $32,%eax 400610710Sddmitriev jmp .L079cbc_dec_tail_collected 400710710Sddmitriev.align 16 400810710Sddmitriev.L082cbc_dec_three: 400910710Sddmitriev call _aesni_decrypt3 401010710Sddmitriev xorps %xmm7,%xmm2 401110710Sddmitriev xorps %xmm6,%xmm3 401210710Sddmitriev xorps %xmm5,%xmm4 401310710Sddmitriev movups %xmm2,(%edi) 401410710Sddmitriev movaps %xmm4,%xmm2 401510710Sddmitriev movups %xmm3,16(%edi) 401610710Sddmitriev leal 32(%edi),%edi 401710710Sddmitriev movups 32(%esi),%xmm7 401810710Sddmitriev subl $48,%eax 401910710Sddmitriev jmp .L079cbc_dec_tail_collected 402010710Sddmitriev.align 16 402110710Sddmitriev.L083cbc_dec_four: 402210710Sddmitriev call _aesni_decrypt4 402310710Sddmitriev movups 16(%esi),%xmm1 402410710Sddmitriev movups 32(%esi),%xmm0 402510710Sddmitriev xorps %xmm7,%xmm2 402610710Sddmitriev movups 48(%esi),%xmm7 402710710Sddmitriev xorps %xmm6,%xmm3 402810710Sddmitriev movups %xmm2,(%edi) 402910710Sddmitriev xorps %xmm1,%xmm4 403010710Sddmitriev movups %xmm3,16(%edi) 403110710Sddmitriev xorps %xmm0,%xmm5 403210710Sddmitriev movups %xmm4,32(%edi) 403310710Sddmitriev leal 48(%edi),%edi 403410710Sddmitriev movaps %xmm5,%xmm2 403510710Sddmitriev subl $64,%eax 403610710Sddmitriev.L079cbc_dec_tail_collected: 403710710Sddmitriev andl $15,%eax 403810710Sddmitriev jnz .L085cbc_dec_tail_partial 403910710Sddmitriev movups %xmm2,(%edi) 404010710Sddmitriev jmp .L075cbc_ret 404110710Sddmitriev.align 16 404210710Sddmitriev.L085cbc_dec_tail_partial: 404310710Sddmitriev movaps %xmm2,(%esp) 404410710Sddmitriev movl $16,%ecx 404510710Sddmitriev movl %esp,%esi 404610710Sddmitriev subl %eax,%ecx 404710710Sddmitriev.long 2767451785 404810710Sddmitriev.L075cbc_ret: 404910710Sddmitriev movl 16(%esp),%esp 405010710Sddmitriev movl 36(%esp),%ebp 405110710Sddmitriev movups %xmm7,(%ebp) 405210710Sddmitriev.L070cbc_abort: 405310710Sddmitriev popl %edi 405410710Sddmitriev popl %esi 405510710Sddmitriev popl %ebx 405610710Sddmitriev popl %ebp 405710710Sddmitriev ret 405810710Sddmitriev.size aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin 405910710Sddmitriev.type _aesni_set_encrypt_key,@function 406010710Sddmitriev.align 16 406110710Sddmitriev_aesni_set_encrypt_key: 406210710Sddmitriev testl %eax,%eax 406310710Sddmitriev jz .L086bad_pointer 406410710Sddmitriev testl %edx,%edx 406510710Sddmitriev jz .L086bad_pointer 406610710Sddmitriev movups (%eax),%xmm0 406710710Sddmitriev xorps %xmm4,%xmm4 406810710Sddmitriev leal 16(%edx),%edx 406910710Sddmitriev cmpl $256,%ecx 407010710Sddmitriev je .L08714rounds 407110710Sddmitriev cmpl $192,%ecx 407210710Sddmitriev je .L08812rounds 407310710Sddmitriev cmpl $128,%ecx 407410710Sddmitriev jne .L089bad_keybits 407510710Sddmitriev.align 16 407610710Sddmitriev.L09010rounds: 407710710Sddmitriev movl $9,%ecx 407810710Sddmitriev movups %xmm0,-16(%edx) 407910710Sddmitriev.byte 102,15,58,223,200,1 408010710Sddmitriev call .L091key_128_cold 408110710Sddmitriev.byte 102,15,58,223,200,2 408210710Sddmitriev call .L092key_128 408310710Sddmitriev.byte 102,15,58,223,200,4 408410710Sddmitriev call .L092key_128 408510710Sddmitriev.byte 102,15,58,223,200,8 408610710Sddmitriev call .L092key_128 408710710Sddmitriev.byte 102,15,58,223,200,16 408810710Sddmitriev call .L092key_128 408910710Sddmitriev.byte 102,15,58,223,200,32 409010710Sddmitriev call .L092key_128 409110710Sddmitriev.byte 102,15,58,223,200,64 409210710Sddmitriev call .L092key_128 409310710Sddmitriev.byte 102,15,58,223,200,128 409410710Sddmitriev call .L092key_128 409510710Sddmitriev.byte 102,15,58,223,200,27 409610710Sddmitriev call .L092key_128 409710710Sddmitriev.byte 102,15,58,223,200,54 409810710Sddmitriev call .L092key_128 409910710Sddmitriev movups %xmm0,(%edx) 410010710Sddmitriev movl %ecx,80(%edx) 410110710Sddmitriev xorl %eax,%eax 410210710Sddmitriev ret 410310710Sddmitriev.align 16 410410710Sddmitriev.L092key_128: 410510710Sddmitriev movups %xmm0,(%edx) 410610710Sddmitriev leal 16(%edx),%edx 410710710Sddmitriev.L091key_128_cold: 410810710Sddmitriev shufps $16,%xmm0,%xmm4 410910710Sddmitriev xorps %xmm4,%xmm0 411010710Sddmitriev shufps $140,%xmm0,%xmm4 411110710Sddmitriev xorps %xmm4,%xmm0 411210710Sddmitriev shufps $255,%xmm1,%xmm1 411310710Sddmitriev xorps %xmm1,%xmm0 411410710Sddmitriev ret 411510710Sddmitriev.align 16 411610710Sddmitriev.L08812rounds: 411710710Sddmitriev movq 16(%eax),%xmm2 411810710Sddmitriev movl $11,%ecx 411910710Sddmitriev movups %xmm0,-16(%edx) 412010710Sddmitriev.byte 102,15,58,223,202,1 412110710Sddmitriev call .L093key_192a_cold 412210710Sddmitriev.byte 102,15,58,223,202,2 412310710Sddmitriev call .L094key_192b 412410710Sddmitriev.byte 102,15,58,223,202,4 412510710Sddmitriev call .L095key_192a 412610710Sddmitriev.byte 102,15,58,223,202,8 412710710Sddmitriev call .L094key_192b 412810710Sddmitriev.byte 102,15,58,223,202,16 412910710Sddmitriev call .L095key_192a 413010710Sddmitriev.byte 102,15,58,223,202,32 413110710Sddmitriev call .L094key_192b 413210710Sddmitriev.byte 102,15,58,223,202,64 413310710Sddmitriev call .L095key_192a 413410710Sddmitriev.byte 102,15,58,223,202,128 413510710Sddmitriev call .L094key_192b 413610710Sddmitriev movups %xmm0,(%edx) 413710710Sddmitriev movl %ecx,48(%edx) 413810710Sddmitriev xorl %eax,%eax 413910710Sddmitriev ret 414010710Sddmitriev.align 16 414110710Sddmitriev.L095key_192a: 414210710Sddmitriev movups %xmm0,(%edx) 414310710Sddmitriev leal 16(%edx),%edx 414410710Sddmitriev.align 16 414510710Sddmitriev.L093key_192a_cold: 414610710Sddmitriev movaps %xmm2,%xmm5 414710710Sddmitriev.L096key_192b_warm: 414810710Sddmitriev shufps $16,%xmm0,%xmm4 414910710Sddmitriev movdqa %xmm2,%xmm3 415010710Sddmitriev xorps %xmm4,%xmm0 415110710Sddmitriev shufps $140,%xmm0,%xmm4 415210710Sddmitriev pslldq $4,%xmm3 415310710Sddmitriev xorps %xmm4,%xmm0 415410710Sddmitriev pshufd $85,%xmm1,%xmm1 415510710Sddmitriev pxor %xmm3,%xmm2 415610710Sddmitriev pxor %xmm1,%xmm0 415710710Sddmitriev pshufd $255,%xmm0,%xmm3 415810710Sddmitriev pxor %xmm3,%xmm2 415910710Sddmitriev ret 416010710Sddmitriev.align 16 416110710Sddmitriev.L094key_192b: 416210710Sddmitriev movaps %xmm0,%xmm3 416310710Sddmitriev shufps $68,%xmm0,%xmm5 416410710Sddmitriev movups %xmm5,(%edx) 416510710Sddmitriev shufps $78,%xmm2,%xmm3 416610710Sddmitriev movups %xmm3,16(%edx) 416710710Sddmitriev leal 32(%edx),%edx 416810710Sddmitriev jmp .L096key_192b_warm 416910710Sddmitriev.align 16 417010710Sddmitriev.L08714rounds: 417110710Sddmitriev movups 16(%eax),%xmm2 417210710Sddmitriev movl $13,%ecx 417310710Sddmitriev leal 16(%edx),%edx 417410710Sddmitriev movups %xmm0,-32(%edx) 417510710Sddmitriev movups %xmm2,-16(%edx) 417610710Sddmitriev.byte 102,15,58,223,202,1 417710710Sddmitriev call .L097key_256a_cold 417810710Sddmitriev.byte 102,15,58,223,200,1 417910710Sddmitriev call .L098key_256b 418010710Sddmitriev.byte 102,15,58,223,202,2 418110710Sddmitriev call .L099key_256a 418210710Sddmitriev.byte 102,15,58,223,200,2 418310710Sddmitriev call .L098key_256b 418410710Sddmitriev.byte 102,15,58,223,202,4 418510710Sddmitriev call .L099key_256a 418610710Sddmitriev.byte 102,15,58,223,200,4 418710710Sddmitriev call .L098key_256b 418810710Sddmitriev.byte 102,15,58,223,202,8 418910710Sddmitriev call .L099key_256a 419010710Sddmitriev.byte 102,15,58,223,200,8 419110710Sddmitriev call .L098key_256b 419210710Sddmitriev.byte 102,15,58,223,202,16 419310710Sddmitriev call .L099key_256a 419410710Sddmitriev.byte 102,15,58,223,200,16 419510710Sddmitriev call .L098key_256b 419610710Sddmitriev.byte 102,15,58,223,202,32 419710710Sddmitriev call .L099key_256a 419810710Sddmitriev.byte 102,15,58,223,200,32 419910710Sddmitriev call .L098key_256b 420010710Sddmitriev.byte 102,15,58,223,202,64 420110710Sddmitriev call .L099key_256a 420210710Sddmitriev movups %xmm0,(%edx) 420310710Sddmitriev movl %ecx,16(%edx) 420410710Sddmitriev xorl %eax,%eax 420510710Sddmitriev ret 420610710Sddmitriev.align 16 420710710Sddmitriev.L099key_256a: 420810710Sddmitriev movups %xmm2,(%edx) 420910710Sddmitriev leal 16(%edx),%edx 421010710Sddmitriev.L097key_256a_cold: 421110710Sddmitriev shufps $16,%xmm0,%xmm4 421210710Sddmitriev xorps %xmm4,%xmm0 421310710Sddmitriev shufps $140,%xmm0,%xmm4 421410710Sddmitriev xorps %xmm4,%xmm0 421510710Sddmitriev shufps $255,%xmm1,%xmm1 421610710Sddmitriev xorps %xmm1,%xmm0 421710710Sddmitriev ret 421810710Sddmitriev.align 16 421910710Sddmitriev.L098key_256b: 422010710Sddmitriev movups %xmm0,(%edx) 422110710Sddmitriev leal 16(%edx),%edx 422210710Sddmitriev shufps $16,%xmm2,%xmm4 422310710Sddmitriev xorps %xmm4,%xmm2 422410710Sddmitriev shufps $140,%xmm2,%xmm4 422510710Sddmitriev xorps %xmm4,%xmm2 422610710Sddmitriev shufps $170,%xmm1,%xmm1 422710710Sddmitriev xorps %xmm1,%xmm2 422810710Sddmitriev ret 422910710Sddmitriev.align 4 423010710Sddmitriev.L086bad_pointer: 423110710Sddmitriev movl $-1,%eax 423210710Sddmitriev ret 423310710Sddmitriev.align 4 423410710Sddmitriev.L089bad_keybits: 423510710Sddmitriev movl $-2,%eax 423610710Sddmitriev ret 423710710Sddmitriev.size _aesni_set_encrypt_key,.-_aesni_set_encrypt_key 423810710Sddmitriev.globl aesni_set_encrypt_key 423910710Sddmitriev.type aesni_set_encrypt_key,@function 424010710Sddmitriev.align 16 424110710Sddmitrievaesni_set_encrypt_key: 424210710Sddmitriev.L_aesni_set_encrypt_key_begin: 424310710Sddmitriev movl 4(%esp),%eax 424410710Sddmitriev movl 8(%esp),%ecx 424510710Sddmitriev movl 12(%esp),%edx 424610710Sddmitriev call _aesni_set_encrypt_key 424710710Sddmitriev ret 424810710Sddmitriev.size aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin 424910710Sddmitriev.globl aesni_set_decrypt_key 425010710Sddmitriev.type aesni_set_decrypt_key,@function 425110710Sddmitriev.align 16 425210710Sddmitrievaesni_set_decrypt_key: 425310710Sddmitriev.L_aesni_set_decrypt_key_begin: 425410710Sddmitriev movl 4(%esp),%eax 425510710Sddmitriev movl 8(%esp),%ecx 425610710Sddmitriev movl 12(%esp),%edx 425710710Sddmitriev call _aesni_set_encrypt_key 425810710Sddmitriev movl 12(%esp),%edx 425910710Sddmitriev shll $4,%ecx 426010710Sddmitriev testl %eax,%eax 426110710Sddmitriev jnz .L100dec_key_ret 426210710Sddmitriev leal 16(%edx,%ecx,1),%eax 426310710Sddmitriev movups (%edx),%xmm0 426410710Sddmitriev movups (%eax),%xmm1 426510710Sddmitriev movups %xmm0,(%eax) 426610710Sddmitriev movups %xmm1,(%edx) 426710710Sddmitriev leal 16(%edx),%edx 426810710Sddmitriev leal -16(%eax),%eax 426910710Sddmitriev.L101dec_key_inverse: 427010710Sddmitriev movups (%edx),%xmm0 427110710Sddmitriev movups (%eax),%xmm1 427210710Sddmitriev.byte 102,15,56,219,192 427310710Sddmitriev.byte 102,15,56,219,201 427410710Sddmitriev leal 16(%edx),%edx 427510710Sddmitriev leal -16(%eax),%eax 427610710Sddmitriev movups %xmm0,16(%eax) 427710710Sddmitriev movups %xmm1,-16(%edx) 427810710Sddmitriev cmpl %edx,%eax 427910710Sddmitriev ja .L101dec_key_inverse 428010710Sddmitriev movups (%edx),%xmm0 428110710Sddmitriev.byte 102,15,56,219,192 428210710Sddmitriev movups %xmm0,(%edx) 428310710Sddmitriev xorl %eax,%eax 428410710Sddmitriev.L100dec_key_ret: 428510710Sddmitriev ret 428610710Sddmitriev.size aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin 428710710Sddmitriev.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 428810710Sddmitriev.byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 428910710Sddmitriev.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 429010710Sddmitriev.byte 115,108,46,111,114,103,62,0 429110710Sddmitriev#endif 429210710Sddmitriev