deps/openssl/asm/x86-win32-masm/aes/aesni-x86.asm

Summary

Maintainability
Test Coverage
TITLE    ../openssl/crypto/aes/asm/aesni-x86.asm
IF @Version LT 800
ECHO MASM version 8.00 or later is strongly recommended.
ENDIF
.686
.XMM
IF @Version LT 800
XMMWORD STRUCT 16
DQ    2 dup (?)
XMMWORD    ENDS
ENDIF

.MODEL    FLAT
OPTION    DOTNAME
IF @Version LT 800
.text$    SEGMENT PAGE 'CODE'
ELSE
.text$    SEGMENT ALIGN(64) 'CODE'
ENDIF
ALIGN    16
_aesni_encrypt    PROC PUBLIC
$L_aesni_encrypt_begin::
    mov    eax,DWORD PTR 4[esp]
    mov    edx,DWORD PTR 12[esp]
    movups    xmm2,XMMWORD PTR [eax]
    mov    ecx,DWORD PTR 240[edx]
    mov    eax,DWORD PTR 8[esp]
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L000enc1_loop_1:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L000enc1_loop_1
DB    102,15,56,221,209
    movups    XMMWORD PTR [eax],xmm2
    ret
_aesni_encrypt ENDP
ALIGN    16
_aesni_decrypt    PROC PUBLIC
$L_aesni_decrypt_begin::
    mov    eax,DWORD PTR 4[esp]
    mov    edx,DWORD PTR 12[esp]
    movups    xmm2,XMMWORD PTR [eax]
    mov    ecx,DWORD PTR 240[edx]
    mov    eax,DWORD PTR 8[esp]
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L001dec1_loop_2:
DB    102,15,56,222,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L001dec1_loop_2
DB    102,15,56,223,209
    movups    XMMWORD PTR [eax],xmm2
    ret
_aesni_decrypt ENDP
ALIGN    16
__aesni_encrypt3    PROC PRIVATE
    movups    xmm0,XMMWORD PTR [edx]
    shr    ecx,1
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
    pxor    xmm3,xmm0
    pxor    xmm4,xmm0
    movups    xmm0,XMMWORD PTR [edx]
$L002enc3_loop:
DB    102,15,56,220,209
DB    102,15,56,220,217
    dec    ecx
DB    102,15,56,220,225
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,220,208
DB    102,15,56,220,216
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,220,224
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L002enc3_loop
DB    102,15,56,220,209
DB    102,15,56,220,217
DB    102,15,56,220,225
DB    102,15,56,221,208
DB    102,15,56,221,216
DB    102,15,56,221,224
    ret
__aesni_encrypt3 ENDP
ALIGN    16
__aesni_decrypt3    PROC PRIVATE
    movups    xmm0,XMMWORD PTR [edx]
    shr    ecx,1
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
    pxor    xmm3,xmm0
    pxor    xmm4,xmm0
    movups    xmm0,XMMWORD PTR [edx]
$L003dec3_loop:
DB    102,15,56,222,209
DB    102,15,56,222,217
    dec    ecx
DB    102,15,56,222,225
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,222,208
DB    102,15,56,222,216
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,222,224
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L003dec3_loop
DB    102,15,56,222,209
DB    102,15,56,222,217
DB    102,15,56,222,225
DB    102,15,56,223,208
DB    102,15,56,223,216
DB    102,15,56,223,224
    ret
__aesni_decrypt3 ENDP
ALIGN    16
__aesni_encrypt4    PROC PRIVATE
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    shr    ecx,1
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
    pxor    xmm3,xmm0
    pxor    xmm4,xmm0
    pxor    xmm5,xmm0
    movups    xmm0,XMMWORD PTR [edx]
$L004enc4_loop:
DB    102,15,56,220,209
DB    102,15,56,220,217
    dec    ecx
DB    102,15,56,220,225
DB    102,15,56,220,233
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,220,208
DB    102,15,56,220,216
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,220,224
DB    102,15,56,220,232
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L004enc4_loop
DB    102,15,56,220,209
DB    102,15,56,220,217
DB    102,15,56,220,225
DB    102,15,56,220,233
DB    102,15,56,221,208
DB    102,15,56,221,216
DB    102,15,56,221,224
DB    102,15,56,221,232
    ret
__aesni_encrypt4 ENDP
ALIGN    16
__aesni_decrypt4    PROC PRIVATE
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    shr    ecx,1
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
    pxor    xmm3,xmm0
    pxor    xmm4,xmm0
    pxor    xmm5,xmm0
    movups    xmm0,XMMWORD PTR [edx]
$L005dec4_loop:
DB    102,15,56,222,209
DB    102,15,56,222,217
    dec    ecx
DB    102,15,56,222,225
DB    102,15,56,222,233
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,222,208
DB    102,15,56,222,216
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,222,224
DB    102,15,56,222,232
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L005dec4_loop
DB    102,15,56,222,209
DB    102,15,56,222,217
DB    102,15,56,222,225
DB    102,15,56,222,233
DB    102,15,56,223,208
DB    102,15,56,223,216
DB    102,15,56,223,224
DB    102,15,56,223,232
    ret
__aesni_decrypt4 ENDP
ALIGN    16
__aesni_encrypt6    PROC PRIVATE
    movups    xmm0,XMMWORD PTR [edx]
    shr    ecx,1
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
    pxor    xmm3,xmm0
DB    102,15,56,220,209
    pxor    xmm4,xmm0
DB    102,15,56,220,217
    pxor    xmm5,xmm0
    dec    ecx
DB    102,15,56,220,225
    pxor    xmm6,xmm0
DB    102,15,56,220,233
    pxor    xmm7,xmm0
DB    102,15,56,220,241
    movups    xmm0,XMMWORD PTR [edx]
DB    102,15,56,220,249
    jmp    $L_aesni_encrypt6_enter
ALIGN    16
$L006enc6_loop:
DB    102,15,56,220,209
DB    102,15,56,220,217
    dec    ecx
DB    102,15,56,220,225
DB    102,15,56,220,233
DB    102,15,56,220,241
DB    102,15,56,220,249
ALIGN    16
$L_aesni_encrypt6_enter::
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,220,208
DB    102,15,56,220,216
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,220,224
DB    102,15,56,220,232
DB    102,15,56,220,240
DB    102,15,56,220,248
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L006enc6_loop
DB    102,15,56,220,209
DB    102,15,56,220,217
DB    102,15,56,220,225
DB    102,15,56,220,233
DB    102,15,56,220,241
DB    102,15,56,220,249
DB    102,15,56,221,208
DB    102,15,56,221,216
DB    102,15,56,221,224
DB    102,15,56,221,232
DB    102,15,56,221,240
DB    102,15,56,221,248
    ret
__aesni_encrypt6 ENDP
ALIGN    16
__aesni_decrypt6    PROC PRIVATE
    movups    xmm0,XMMWORD PTR [edx]
    shr    ecx,1
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
    pxor    xmm3,xmm0
DB    102,15,56,222,209
    pxor    xmm4,xmm0
DB    102,15,56,222,217
    pxor    xmm5,xmm0
    dec    ecx
DB    102,15,56,222,225
    pxor    xmm6,xmm0
DB    102,15,56,222,233
    pxor    xmm7,xmm0
DB    102,15,56,222,241
    movups    xmm0,XMMWORD PTR [edx]
DB    102,15,56,222,249
    jmp    $L_aesni_decrypt6_enter
ALIGN    16
$L007dec6_loop:
DB    102,15,56,222,209
DB    102,15,56,222,217
    dec    ecx
DB    102,15,56,222,225
DB    102,15,56,222,233
DB    102,15,56,222,241
DB    102,15,56,222,249
ALIGN    16
$L_aesni_decrypt6_enter::
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,222,208
DB    102,15,56,222,216
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,222,224
DB    102,15,56,222,232
DB    102,15,56,222,240
DB    102,15,56,222,248
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L007dec6_loop
DB    102,15,56,222,209
DB    102,15,56,222,217
DB    102,15,56,222,225
DB    102,15,56,222,233
DB    102,15,56,222,241
DB    102,15,56,222,249
DB    102,15,56,223,208
DB    102,15,56,223,216
DB    102,15,56,223,224
DB    102,15,56,223,232
DB    102,15,56,223,240
DB    102,15,56,223,248
    ret
__aesni_decrypt6 ENDP
ALIGN    16
_aesni_ecb_encrypt    PROC PUBLIC
$L_aesni_ecb_encrypt_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    esi,DWORD PTR 20[esp]
    mov    edi,DWORD PTR 24[esp]
    mov    eax,DWORD PTR 28[esp]
    mov    edx,DWORD PTR 32[esp]
    mov    ebx,DWORD PTR 36[esp]
    and    eax,-16
    jz    $L008ecb_ret
    mov    ecx,DWORD PTR 240[edx]
    test    ebx,ebx
    jz    $L009ecb_decrypt
    mov    ebp,edx
    mov    ebx,ecx
    cmp    eax,96
    jb    $L010ecb_enc_tail
    movdqu    xmm2,XMMWORD PTR [esi]
    movdqu    xmm3,XMMWORD PTR 16[esi]
    movdqu    xmm4,XMMWORD PTR 32[esi]
    movdqu    xmm5,XMMWORD PTR 48[esi]
    movdqu    xmm6,XMMWORD PTR 64[esi]
    movdqu    xmm7,XMMWORD PTR 80[esi]
    lea    esi,DWORD PTR 96[esi]
    sub    eax,96
    jmp    $L011ecb_enc_loop6_enter
ALIGN    16
$L012ecb_enc_loop6:
    movups    XMMWORD PTR [edi],xmm2
    movdqu    xmm2,XMMWORD PTR [esi]
    movups    XMMWORD PTR 16[edi],xmm3
    movdqu    xmm3,XMMWORD PTR 16[esi]
    movups    XMMWORD PTR 32[edi],xmm4
    movdqu    xmm4,XMMWORD PTR 32[esi]
    movups    XMMWORD PTR 48[edi],xmm5
    movdqu    xmm5,XMMWORD PTR 48[esi]
    movups    XMMWORD PTR 64[edi],xmm6
    movdqu    xmm6,XMMWORD PTR 64[esi]
    movups    XMMWORD PTR 80[edi],xmm7
    lea    edi,DWORD PTR 96[edi]
    movdqu    xmm7,XMMWORD PTR 80[esi]
    lea    esi,DWORD PTR 96[esi]
$L011ecb_enc_loop6_enter:
    call    __aesni_encrypt6
    mov    edx,ebp
    mov    ecx,ebx
    sub    eax,96
    jnc    $L012ecb_enc_loop6
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    movups    XMMWORD PTR 64[edi],xmm6
    movups    XMMWORD PTR 80[edi],xmm7
    lea    edi,DWORD PTR 96[edi]
    add    eax,96
    jz    $L008ecb_ret
$L010ecb_enc_tail:
    movups    xmm2,XMMWORD PTR [esi]
    cmp    eax,32
    jb    $L013ecb_enc_one
    movups    xmm3,XMMWORD PTR 16[esi]
    je    $L014ecb_enc_two
    movups    xmm4,XMMWORD PTR 32[esi]
    cmp    eax,64
    jb    $L015ecb_enc_three
    movups    xmm5,XMMWORD PTR 48[esi]
    je    $L016ecb_enc_four
    movups    xmm6,XMMWORD PTR 64[esi]
    xorps    xmm7,xmm7
    call    __aesni_encrypt6
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    movups    XMMWORD PTR 64[edi],xmm6
    jmp    $L008ecb_ret
ALIGN    16
$L013ecb_enc_one:
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L017enc1_loop_3:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L017enc1_loop_3
DB    102,15,56,221,209
    movups    XMMWORD PTR [edi],xmm2
    jmp    $L008ecb_ret
ALIGN    16
$L014ecb_enc_two:
    xorps    xmm4,xmm4
    call    __aesni_encrypt3
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    jmp    $L008ecb_ret
ALIGN    16
$L015ecb_enc_three:
    call    __aesni_encrypt3
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    jmp    $L008ecb_ret
ALIGN    16
$L016ecb_enc_four:
    call    __aesni_encrypt4
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    jmp    $L008ecb_ret
ALIGN    16
$L009ecb_decrypt:
    mov    ebp,edx
    mov    ebx,ecx
    cmp    eax,96
    jb    $L018ecb_dec_tail
    movdqu    xmm2,XMMWORD PTR [esi]
    movdqu    xmm3,XMMWORD PTR 16[esi]
    movdqu    xmm4,XMMWORD PTR 32[esi]
    movdqu    xmm5,XMMWORD PTR 48[esi]
    movdqu    xmm6,XMMWORD PTR 64[esi]
    movdqu    xmm7,XMMWORD PTR 80[esi]
    lea    esi,DWORD PTR 96[esi]
    sub    eax,96
    jmp    $L019ecb_dec_loop6_enter
ALIGN    16
$L020ecb_dec_loop6:
    movups    XMMWORD PTR [edi],xmm2
    movdqu    xmm2,XMMWORD PTR [esi]
    movups    XMMWORD PTR 16[edi],xmm3
    movdqu    xmm3,XMMWORD PTR 16[esi]
    movups    XMMWORD PTR 32[edi],xmm4
    movdqu    xmm4,XMMWORD PTR 32[esi]
    movups    XMMWORD PTR 48[edi],xmm5
    movdqu    xmm5,XMMWORD PTR 48[esi]
    movups    XMMWORD PTR 64[edi],xmm6
    movdqu    xmm6,XMMWORD PTR 64[esi]
    movups    XMMWORD PTR 80[edi],xmm7
    lea    edi,DWORD PTR 96[edi]
    movdqu    xmm7,XMMWORD PTR 80[esi]
    lea    esi,DWORD PTR 96[esi]
$L019ecb_dec_loop6_enter:
    call    __aesni_decrypt6
    mov    edx,ebp
    mov    ecx,ebx
    sub    eax,96
    jnc    $L020ecb_dec_loop6
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    movups    XMMWORD PTR 64[edi],xmm6
    movups    XMMWORD PTR 80[edi],xmm7
    lea    edi,DWORD PTR 96[edi]
    add    eax,96
    jz    $L008ecb_ret
$L018ecb_dec_tail:
    movups    xmm2,XMMWORD PTR [esi]
    cmp    eax,32
    jb    $L021ecb_dec_one
    movups    xmm3,XMMWORD PTR 16[esi]
    je    $L022ecb_dec_two
    movups    xmm4,XMMWORD PTR 32[esi]
    cmp    eax,64
    jb    $L023ecb_dec_three
    movups    xmm5,XMMWORD PTR 48[esi]
    je    $L024ecb_dec_four
    movups    xmm6,XMMWORD PTR 64[esi]
    xorps    xmm7,xmm7
    call    __aesni_decrypt6
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    movups    XMMWORD PTR 64[edi],xmm6
    jmp    $L008ecb_ret
ALIGN    16
$L021ecb_dec_one:
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L025dec1_loop_4:
DB    102,15,56,222,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L025dec1_loop_4
DB    102,15,56,223,209
    movups    XMMWORD PTR [edi],xmm2
    jmp    $L008ecb_ret
ALIGN    16
$L022ecb_dec_two:
    xorps    xmm4,xmm4
    call    __aesni_decrypt3
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    jmp    $L008ecb_ret
ALIGN    16
$L023ecb_dec_three:
    call    __aesni_decrypt3
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    jmp    $L008ecb_ret
ALIGN    16
$L024ecb_dec_four:
    call    __aesni_decrypt4
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
$L008ecb_ret:
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_aesni_ecb_encrypt ENDP
ALIGN    16
_aesni_ccm64_encrypt_blocks    PROC PUBLIC
$L_aesni_ccm64_encrypt_blocks_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    esi,DWORD PTR 20[esp]
    mov    edi,DWORD PTR 24[esp]
    mov    eax,DWORD PTR 28[esp]
    mov    edx,DWORD PTR 32[esp]
    mov    ebx,DWORD PTR 36[esp]
    mov    ecx,DWORD PTR 40[esp]
    mov    ebp,esp
    sub    esp,60
    and    esp,-16
    mov    DWORD PTR 48[esp],ebp
    movdqu    xmm7,XMMWORD PTR [ebx]
    movdqu    xmm3,XMMWORD PTR [ecx]
    mov    ecx,DWORD PTR 240[edx]
    mov    DWORD PTR [esp],202182159
    mov    DWORD PTR 4[esp],134810123
    mov    DWORD PTR 8[esp],67438087
    mov    DWORD PTR 12[esp],66051
    mov    ebx,1
    xor    ebp,ebp
    mov    DWORD PTR 16[esp],ebx
    mov    DWORD PTR 20[esp],ebp
    mov    DWORD PTR 24[esp],ebp
    mov    DWORD PTR 28[esp],ebp
    shr    ecx,1
    lea    ebp,DWORD PTR [edx]
    movdqa    xmm5,XMMWORD PTR [esp]
    movdqa    xmm2,xmm7
    mov    ebx,ecx
DB    102,15,56,0,253
$L026ccm64_enc_outer:
    movups    xmm0,XMMWORD PTR [ebp]
    mov    ecx,ebx
    movups    xmm6,XMMWORD PTR [esi]
    xorps    xmm2,xmm0
    movups    xmm1,XMMWORD PTR 16[ebp]
    xorps    xmm0,xmm6
    lea    edx,DWORD PTR 32[ebp]
    xorps    xmm3,xmm0
    movups    xmm0,XMMWORD PTR [edx]
$L027ccm64_enc2_loop:
DB    102,15,56,220,209
    dec    ecx
DB    102,15,56,220,217
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,220,208
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,220,216
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L027ccm64_enc2_loop
DB    102,15,56,220,209
DB    102,15,56,220,217
    paddq    xmm7,XMMWORD PTR 16[esp]
DB    102,15,56,221,208
DB    102,15,56,221,216
    dec    eax
    lea    esi,DWORD PTR 16[esi]
    xorps    xmm6,xmm2
    movdqa    xmm2,xmm7
    movups    XMMWORD PTR [edi],xmm6
    lea    edi,DWORD PTR 16[edi]
DB    102,15,56,0,213
    jnz    $L026ccm64_enc_outer
    mov    esp,DWORD PTR 48[esp]
    mov    edi,DWORD PTR 40[esp]
    movups    XMMWORD PTR [edi],xmm3
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_aesni_ccm64_encrypt_blocks ENDP
ALIGN    16
_aesni_ccm64_decrypt_blocks    PROC PUBLIC
$L_aesni_ccm64_decrypt_blocks_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    esi,DWORD PTR 20[esp]
    mov    edi,DWORD PTR 24[esp]
    mov    eax,DWORD PTR 28[esp]
    mov    edx,DWORD PTR 32[esp]
    mov    ebx,DWORD PTR 36[esp]
    mov    ecx,DWORD PTR 40[esp]
    mov    ebp,esp
    sub    esp,60
    and    esp,-16
    mov    DWORD PTR 48[esp],ebp
    movdqu    xmm7,XMMWORD PTR [ebx]
    movdqu    xmm3,XMMWORD PTR [ecx]
    mov    ecx,DWORD PTR 240[edx]
    mov    DWORD PTR [esp],202182159
    mov    DWORD PTR 4[esp],134810123
    mov    DWORD PTR 8[esp],67438087
    mov    DWORD PTR 12[esp],66051
    mov    ebx,1
    xor    ebp,ebp
    mov    DWORD PTR 16[esp],ebx
    mov    DWORD PTR 20[esp],ebp
    mov    DWORD PTR 24[esp],ebp
    mov    DWORD PTR 28[esp],ebp
    movdqa    xmm5,XMMWORD PTR [esp]
    movdqa    xmm2,xmm7
    mov    ebp,edx
    mov    ebx,ecx
DB    102,15,56,0,253
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L028enc1_loop_5:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L028enc1_loop_5
DB    102,15,56,221,209
    movups    xmm6,XMMWORD PTR [esi]
    paddq    xmm7,XMMWORD PTR 16[esp]
    lea    esi,QWORD PTR 16[esi]
    jmp    $L029ccm64_dec_outer
ALIGN    16
$L029ccm64_dec_outer:
    xorps    xmm6,xmm2
    movdqa    xmm2,xmm7
    mov    ecx,ebx
    movups    XMMWORD PTR [edi],xmm6
    lea    edi,DWORD PTR 16[edi]
DB    102,15,56,0,213
    sub    eax,1
    jz    $L030ccm64_dec_break
    movups    xmm0,XMMWORD PTR [ebp]
    shr    ecx,1
    movups    xmm1,XMMWORD PTR 16[ebp]
    xorps    xmm6,xmm0
    lea    edx,DWORD PTR 32[ebp]
    xorps    xmm2,xmm0
    xorps    xmm3,xmm6
    movups    xmm0,XMMWORD PTR [edx]
$L031ccm64_dec2_loop:
DB    102,15,56,220,209
    dec    ecx
DB    102,15,56,220,217
    movups    xmm1,XMMWORD PTR 16[edx]
DB    102,15,56,220,208
    lea    edx,DWORD PTR 32[edx]
DB    102,15,56,220,216
    movups    xmm0,XMMWORD PTR [edx]
    jnz    $L031ccm64_dec2_loop
    movups    xmm6,XMMWORD PTR [esi]
    paddq    xmm7,XMMWORD PTR 16[esp]
DB    102,15,56,220,209
DB    102,15,56,220,217
    lea    esi,QWORD PTR 16[esi]
DB    102,15,56,221,208
DB    102,15,56,221,216
    jmp    $L029ccm64_dec_outer
ALIGN    16
$L030ccm64_dec_break:
    mov    edx,ebp
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    xorps    xmm6,xmm0
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm3,xmm6
$L032enc1_loop_6:
DB    102,15,56,220,217
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L032enc1_loop_6
DB    102,15,56,221,217
    mov    esp,DWORD PTR 48[esp]
    mov    edi,DWORD PTR 40[esp]
    movups    XMMWORD PTR [edi],xmm3
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_aesni_ccm64_decrypt_blocks ENDP
ALIGN    16
_aesni_ctr32_encrypt_blocks    PROC PUBLIC
$L_aesni_ctr32_encrypt_blocks_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    esi,DWORD PTR 20[esp]
    mov    edi,DWORD PTR 24[esp]
    mov    eax,DWORD PTR 28[esp]
    mov    edx,DWORD PTR 32[esp]
    mov    ebx,DWORD PTR 36[esp]
    mov    ebp,esp
    sub    esp,88
    and    esp,-16
    mov    DWORD PTR 80[esp],ebp
    cmp    eax,1
    je    $L033ctr32_one_shortcut
    movdqu    xmm7,XMMWORD PTR [ebx]
    mov    DWORD PTR [esp],202182159
    mov    DWORD PTR 4[esp],134810123
    mov    DWORD PTR 8[esp],67438087
    mov    DWORD PTR 12[esp],66051
    mov    ecx,6
    xor    ebp,ebp
    mov    DWORD PTR 16[esp],ecx
    mov    DWORD PTR 20[esp],ecx
    mov    DWORD PTR 24[esp],ecx
    mov    DWORD PTR 28[esp],ebp
DB    102,15,58,22,251,3
DB    102,15,58,34,253,3
    mov    ecx,DWORD PTR 240[edx]
    bswap    ebx
    pxor    xmm1,xmm1
    pxor    xmm0,xmm0
    movdqa    xmm2,XMMWORD PTR [esp]
DB    102,15,58,34,203,0
    lea    ebp,DWORD PTR 3[ebx]
DB    102,15,58,34,197,0
    inc    ebx
DB    102,15,58,34,203,1
    inc    ebp
DB    102,15,58,34,197,1
    inc    ebx
DB    102,15,58,34,203,2
    inc    ebp
DB    102,15,58,34,197,2
    movdqa    XMMWORD PTR 48[esp],xmm1
DB    102,15,56,0,202
    movdqa    XMMWORD PTR 64[esp],xmm0
DB    102,15,56,0,194
    pshufd    xmm2,xmm1,192
    pshufd    xmm3,xmm1,128
    cmp    eax,6
    jb    $L034ctr32_tail
    movdqa    XMMWORD PTR 32[esp],xmm7
    shr    ecx,1
    mov    ebp,edx
    mov    ebx,ecx
    sub    eax,6
    jmp    $L035ctr32_loop6
ALIGN    16
$L035ctr32_loop6:
    pshufd    xmm4,xmm1,64
    movdqa    xmm1,XMMWORD PTR 32[esp]
    pshufd    xmm5,xmm0,192
    por    xmm2,xmm1
    pshufd    xmm6,xmm0,128
    por    xmm3,xmm1
    pshufd    xmm7,xmm0,64
    por    xmm4,xmm1
    por    xmm5,xmm1
    por    xmm6,xmm1
    por    xmm7,xmm1
    movups    xmm0,XMMWORD PTR [ebp]
    movups    xmm1,XMMWORD PTR 16[ebp]
    lea    edx,DWORD PTR 32[ebp]
    dec    ecx
    pxor    xmm2,xmm0
    pxor    xmm3,xmm0
DB    102,15,56,220,209
    pxor    xmm4,xmm0
DB    102,15,56,220,217
    pxor    xmm5,xmm0
DB    102,15,56,220,225
    pxor    xmm6,xmm0
DB    102,15,56,220,233
    pxor    xmm7,xmm0
DB    102,15,56,220,241
    movups    xmm0,XMMWORD PTR [edx]
DB    102,15,56,220,249
    call    $L_aesni_encrypt6_enter
    movups    xmm1,XMMWORD PTR [esi]
    movups    xmm0,XMMWORD PTR 16[esi]
    xorps    xmm2,xmm1
    movups    xmm1,XMMWORD PTR 32[esi]
    xorps    xmm3,xmm0
    movups    XMMWORD PTR [edi],xmm2
    movdqa    xmm0,XMMWORD PTR 16[esp]
    xorps    xmm4,xmm1
    movdqa    xmm1,XMMWORD PTR 48[esp]
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    paddd    xmm1,xmm0
    paddd    xmm0,XMMWORD PTR 64[esp]
    movdqa    xmm2,XMMWORD PTR [esp]
    movups    xmm3,XMMWORD PTR 48[esi]
    movups    xmm4,XMMWORD PTR 64[esi]
    xorps    xmm5,xmm3
    movups    xmm3,XMMWORD PTR 80[esi]
    lea    esi,DWORD PTR 96[esi]
    movdqa    XMMWORD PTR 48[esp],xmm1
DB    102,15,56,0,202
    xorps    xmm6,xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    xorps    xmm7,xmm3
    movdqa    XMMWORD PTR 64[esp],xmm0
DB    102,15,56,0,194
    movups    XMMWORD PTR 64[edi],xmm6
    pshufd    xmm2,xmm1,192
    movups    XMMWORD PTR 80[edi],xmm7
    lea    edi,DWORD PTR 96[edi]
    mov    ecx,ebx
    pshufd    xmm3,xmm1,128
    sub    eax,6
    jnc    $L035ctr32_loop6
    add    eax,6
    jz    $L036ctr32_ret
    mov    edx,ebp
    lea    ecx,DWORD PTR 1[ecx*2]
    movdqa    xmm7,XMMWORD PTR 32[esp]
$L034ctr32_tail:
    por    xmm2,xmm7
    cmp    eax,2
    jb    $L037ctr32_one
    pshufd    xmm4,xmm1,64
    por    xmm3,xmm7
    je    $L038ctr32_two
    pshufd    xmm5,xmm0,192
    por    xmm4,xmm7
    cmp    eax,4
    jb    $L039ctr32_three
    pshufd    xmm6,xmm0,128
    por    xmm5,xmm7
    je    $L040ctr32_four
    por    xmm6,xmm7
    call    __aesni_encrypt6
    movups    xmm1,XMMWORD PTR [esi]
    movups    xmm0,XMMWORD PTR 16[esi]
    xorps    xmm2,xmm1
    movups    xmm1,XMMWORD PTR 32[esi]
    xorps    xmm3,xmm0
    movups    xmm0,XMMWORD PTR 48[esi]
    xorps    xmm4,xmm1
    movups    xmm1,XMMWORD PTR 64[esi]
    xorps    xmm5,xmm0
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm6,xmm1
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    movups    XMMWORD PTR 64[edi],xmm6
    jmp    $L036ctr32_ret
ALIGN    16
$L033ctr32_one_shortcut:
    movups    xmm2,XMMWORD PTR [ebx]
    mov    ecx,DWORD PTR 240[edx]
$L037ctr32_one:
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L041enc1_loop_7:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L041enc1_loop_7
DB    102,15,56,221,209
    movups    xmm6,XMMWORD PTR [esi]
    xorps    xmm6,xmm2
    movups    XMMWORD PTR [edi],xmm6
    jmp    $L036ctr32_ret
ALIGN    16
$L038ctr32_two:
    call    __aesni_encrypt3
    movups    xmm5,XMMWORD PTR [esi]
    movups    xmm6,XMMWORD PTR 16[esi]
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    jmp    $L036ctr32_ret
ALIGN    16
$L039ctr32_three:
    call    __aesni_encrypt3
    movups    xmm5,XMMWORD PTR [esi]
    movups    xmm6,XMMWORD PTR 16[esi]
    xorps    xmm2,xmm5
    movups    xmm7,XMMWORD PTR 32[esi]
    xorps    xmm3,xmm6
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm4,xmm7
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    jmp    $L036ctr32_ret
ALIGN    16
$L040ctr32_four:
    call    __aesni_encrypt4
    movups    xmm6,XMMWORD PTR [esi]
    movups    xmm7,XMMWORD PTR 16[esi]
    movups    xmm1,XMMWORD PTR 32[esi]
    xorps    xmm2,xmm6
    movups    xmm0,XMMWORD PTR 48[esi]
    xorps    xmm3,xmm7
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm4,xmm1
    movups    XMMWORD PTR 16[edi],xmm3
    xorps    xmm5,xmm0
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
$L036ctr32_ret:
    mov    esp,DWORD PTR 80[esp]
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_aesni_ctr32_encrypt_blocks ENDP
ALIGN    16
_aesni_xts_encrypt    PROC PUBLIC
$L_aesni_xts_encrypt_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    edx,DWORD PTR 36[esp]
    mov    esi,DWORD PTR 40[esp]
    mov    ecx,DWORD PTR 240[edx]
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L042enc1_loop_8:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L042enc1_loop_8
DB    102,15,56,221,209
    mov    esi,DWORD PTR 20[esp]
    mov    edi,DWORD PTR 24[esp]
    mov    eax,DWORD PTR 28[esp]
    mov    edx,DWORD PTR 32[esp]
    mov    ebp,esp
    sub    esp,120
    mov    ecx,DWORD PTR 240[edx]
    and    esp,-16
    mov    DWORD PTR 96[esp],135
    mov    DWORD PTR 100[esp],0
    mov    DWORD PTR 104[esp],1
    mov    DWORD PTR 108[esp],0
    mov    DWORD PTR 112[esp],eax
    mov    DWORD PTR 116[esp],ebp
    movdqa    xmm1,xmm2
    pxor    xmm0,xmm0
    movdqa    xmm3,XMMWORD PTR 96[esp]
    pcmpgtd    xmm0,xmm1
    and    eax,-16
    mov    ebp,edx
    mov    ebx,ecx
    sub    eax,96
    jc    $L043xts_enc_short
    shr    ecx,1
    mov    ebx,ecx
    jmp    $L044xts_enc_loop6
ALIGN    16
$L044xts_enc_loop6:
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR [esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR 16[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR 32[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR 48[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm7,xmm0,19
    movdqa    XMMWORD PTR 64[esp],xmm1
    paddq    xmm1,xmm1
    movups    xmm0,XMMWORD PTR [ebp]
    pand    xmm7,xmm3
    movups    xmm2,XMMWORD PTR [esi]
    pxor    xmm7,xmm1
    movdqu    xmm3,XMMWORD PTR 16[esi]
    xorps    xmm2,xmm0
    movdqu    xmm4,XMMWORD PTR 32[esi]
    pxor    xmm3,xmm0
    movdqu    xmm5,XMMWORD PTR 48[esi]
    pxor    xmm4,xmm0
    movdqu    xmm6,XMMWORD PTR 64[esi]
    pxor    xmm5,xmm0
    movdqu    xmm1,XMMWORD PTR 80[esi]
    pxor    xmm6,xmm0
    lea    esi,DWORD PTR 96[esi]
    pxor    xmm2,XMMWORD PTR [esp]
    movdqa    XMMWORD PTR 80[esp],xmm7
    pxor    xmm7,xmm1
    movups    xmm1,XMMWORD PTR 16[ebp]
    lea    edx,DWORD PTR 32[ebp]
    pxor    xmm3,XMMWORD PTR 16[esp]
DB    102,15,56,220,209
    pxor    xmm4,XMMWORD PTR 32[esp]
DB    102,15,56,220,217
    pxor    xmm5,XMMWORD PTR 48[esp]
    dec    ecx
DB    102,15,56,220,225
    pxor    xmm6,XMMWORD PTR 64[esp]
DB    102,15,56,220,233
    pxor    xmm7,xmm0
DB    102,15,56,220,241
    movups    xmm0,XMMWORD PTR [edx]
DB    102,15,56,220,249
    call    $L_aesni_encrypt6_enter
    movdqa    xmm1,XMMWORD PTR 80[esp]
    pxor    xmm0,xmm0
    xorps    xmm2,XMMWORD PTR [esp]
    pcmpgtd    xmm0,xmm1
    xorps    xmm3,XMMWORD PTR 16[esp]
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm4,XMMWORD PTR 32[esp]
    movups    XMMWORD PTR 16[edi],xmm3
    xorps    xmm5,XMMWORD PTR 48[esp]
    movups    XMMWORD PTR 32[edi],xmm4
    xorps    xmm6,XMMWORD PTR 64[esp]
    movups    XMMWORD PTR 48[edi],xmm5
    xorps    xmm7,xmm1
    movups    XMMWORD PTR 64[edi],xmm6
    pshufd    xmm2,xmm0,19
    movups    XMMWORD PTR 80[edi],xmm7
    lea    edi,DWORD PTR 96[edi]
    movdqa    xmm3,XMMWORD PTR 96[esp]
    pxor    xmm0,xmm0
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    mov    ecx,ebx
    pxor    xmm1,xmm2
    sub    eax,96
    jnc    $L044xts_enc_loop6
    lea    ecx,DWORD PTR 1[ecx*2]
    mov    edx,ebp
    mov    ebx,ecx
$L043xts_enc_short:
    add    eax,96
    jz    $L045xts_enc_done6x
    movdqa    xmm5,xmm1
    cmp    eax,32
    jb    $L046xts_enc_one
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    je    $L047xts_enc_two
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    xmm6,xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    cmp    eax,64
    jb    $L048xts_enc_three
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    xmm7,xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    movdqa    XMMWORD PTR [esp],xmm5
    movdqa    XMMWORD PTR 16[esp],xmm6
    je    $L049xts_enc_four
    movdqa    XMMWORD PTR 32[esp],xmm7
    pshufd    xmm7,xmm0,19
    movdqa    XMMWORD PTR 48[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm7,xmm3
    pxor    xmm7,xmm1
    movdqu    xmm2,XMMWORD PTR [esi]
    movdqu    xmm3,XMMWORD PTR 16[esi]
    movdqu    xmm4,XMMWORD PTR 32[esi]
    pxor    xmm2,XMMWORD PTR [esp]
    movdqu    xmm5,XMMWORD PTR 48[esi]
    pxor    xmm3,XMMWORD PTR 16[esp]
    movdqu    xmm6,XMMWORD PTR 64[esi]
    pxor    xmm4,XMMWORD PTR 32[esp]
    lea    esi,DWORD PTR 80[esi]
    pxor    xmm5,XMMWORD PTR 48[esp]
    movdqa    XMMWORD PTR 64[esp],xmm7
    pxor    xmm6,xmm7
    call    __aesni_encrypt6
    movaps    xmm1,XMMWORD PTR 64[esp]
    xorps    xmm2,XMMWORD PTR [esp]
    xorps    xmm3,XMMWORD PTR 16[esp]
    xorps    xmm4,XMMWORD PTR 32[esp]
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm5,XMMWORD PTR 48[esp]
    movups    XMMWORD PTR 16[edi],xmm3
    xorps    xmm6,xmm1
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    movups    XMMWORD PTR 64[edi],xmm6
    lea    edi,DWORD PTR 80[edi]
    jmp    $L050xts_enc_done
ALIGN    16
$L046xts_enc_one:
    movups    xmm2,XMMWORD PTR [esi]
    lea    esi,DWORD PTR 16[esi]
    xorps    xmm2,xmm5
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L051enc1_loop_9:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L051enc1_loop_9
DB    102,15,56,221,209
    xorps    xmm2,xmm5
    movups    XMMWORD PTR [edi],xmm2
    lea    edi,DWORD PTR 16[edi]
    movdqa    xmm1,xmm5
    jmp    $L050xts_enc_done
ALIGN    16
$L047xts_enc_two:
    movaps    xmm6,xmm1
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm3,XMMWORD PTR 16[esi]
    lea    esi,DWORD PTR 32[esi]
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    xorps    xmm4,xmm4
    call    __aesni_encrypt3
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    lea    edi,DWORD PTR 32[edi]
    movdqa    xmm1,xmm6
    jmp    $L050xts_enc_done
ALIGN    16
$L048xts_enc_three:
    movaps    xmm7,xmm1
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm3,XMMWORD PTR 16[esi]
    movups    xmm4,XMMWORD PTR 32[esi]
    lea    esi,DWORD PTR 48[esi]
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    xorps    xmm4,xmm7
    call    __aesni_encrypt3
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    xorps    xmm4,xmm7
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    lea    edi,DWORD PTR 48[edi]
    movdqa    xmm1,xmm7
    jmp    $L050xts_enc_done
ALIGN    16
$L049xts_enc_four:
    movaps    xmm6,xmm1
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm3,XMMWORD PTR 16[esi]
    movups    xmm4,XMMWORD PTR 32[esi]
    xorps    xmm2,XMMWORD PTR [esp]
    movups    xmm5,XMMWORD PTR 48[esi]
    lea    esi,DWORD PTR 64[esi]
    xorps    xmm3,XMMWORD PTR 16[esp]
    xorps    xmm4,xmm7
    xorps    xmm5,xmm6
    call    __aesni_encrypt4
    xorps    xmm2,XMMWORD PTR [esp]
    xorps    xmm3,XMMWORD PTR 16[esp]
    xorps    xmm4,xmm7
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm5,xmm6
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    lea    edi,DWORD PTR 64[edi]
    movdqa    xmm1,xmm6
    jmp    $L050xts_enc_done
ALIGN    16
$L045xts_enc_done6x:
    mov    eax,DWORD PTR 112[esp]
    and    eax,15
    jz    $L052xts_enc_ret
    movdqa    xmm5,xmm1
    mov    DWORD PTR 112[esp],eax
    jmp    $L053xts_enc_steal
ALIGN    16
$L050xts_enc_done:
    mov    eax,DWORD PTR 112[esp]
    pxor    xmm0,xmm0
    and    eax,15
    jz    $L052xts_enc_ret
    pcmpgtd    xmm0,xmm1
    mov    DWORD PTR 112[esp],eax
    pshufd    xmm5,xmm0,19
    paddq    xmm1,xmm1
    pand    xmm5,XMMWORD PTR 96[esp]
    pxor    xmm5,xmm1
$L053xts_enc_steal:
    movzx    ecx,BYTE PTR [esi]
    movzx    edx,BYTE PTR [edi-16]
    lea    esi,DWORD PTR 1[esi]
    mov    BYTE PTR [edi-16],cl
    mov    BYTE PTR [edi],dl
    lea    edi,DWORD PTR 1[edi]
    sub    eax,1
    jnz    $L053xts_enc_steal
    sub    edi,DWORD PTR 112[esp]
    mov    edx,ebp
    mov    ecx,ebx
    movups    xmm2,XMMWORD PTR [edi-16]
    xorps    xmm2,xmm5
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L054enc1_loop_10:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L054enc1_loop_10
DB    102,15,56,221,209
    xorps    xmm2,xmm5
    movups    XMMWORD PTR [edi-16],xmm2
$L052xts_enc_ret:
    mov    esp,DWORD PTR 116[esp]
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_aesni_xts_encrypt ENDP
ALIGN    16
_aesni_xts_decrypt    PROC PUBLIC
$L_aesni_xts_decrypt_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    edx,DWORD PTR 36[esp]
    mov    esi,DWORD PTR 40[esp]
    mov    ecx,DWORD PTR 240[edx]
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L055enc1_loop_11:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L055enc1_loop_11
DB    102,15,56,221,209
    mov    esi,DWORD PTR 20[esp]
    mov    edi,DWORD PTR 24[esp]
    mov    eax,DWORD PTR 28[esp]
    mov    edx,DWORD PTR 32[esp]
    mov    ebp,esp
    sub    esp,120
    and    esp,-16
    xor    ebx,ebx
    test    eax,15
    setnz    bl
    shl    ebx,4
    sub    eax,ebx
    mov    DWORD PTR 96[esp],135
    mov    DWORD PTR 100[esp],0
    mov    DWORD PTR 104[esp],1
    mov    DWORD PTR 108[esp],0
    mov    DWORD PTR 112[esp],eax
    mov    DWORD PTR 116[esp],ebp
    mov    ecx,DWORD PTR 240[edx]
    mov    ebp,edx
    mov    ebx,ecx
    movdqa    xmm1,xmm2
    pxor    xmm0,xmm0
    movdqa    xmm3,XMMWORD PTR 96[esp]
    pcmpgtd    xmm0,xmm1
    and    eax,-16
    sub    eax,96
    jc    $L056xts_dec_short
    shr    ecx,1
    mov    ebx,ecx
    jmp    $L057xts_dec_loop6
ALIGN    16
$L057xts_dec_loop6:
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR [esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR 16[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR 32[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    XMMWORD PTR 48[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    pshufd    xmm7,xmm0,19
    movdqa    XMMWORD PTR 64[esp],xmm1
    paddq    xmm1,xmm1
    movups    xmm0,XMMWORD PTR [ebp]
    pand    xmm7,xmm3
    movups    xmm2,XMMWORD PTR [esi]
    pxor    xmm7,xmm1
    movdqu    xmm3,XMMWORD PTR 16[esi]
    xorps    xmm2,xmm0
    movdqu    xmm4,XMMWORD PTR 32[esi]
    pxor    xmm3,xmm0
    movdqu    xmm5,XMMWORD PTR 48[esi]
    pxor    xmm4,xmm0
    movdqu    xmm6,XMMWORD PTR 64[esi]
    pxor    xmm5,xmm0
    movdqu    xmm1,XMMWORD PTR 80[esi]
    pxor    xmm6,xmm0
    lea    esi,DWORD PTR 96[esi]
    pxor    xmm2,XMMWORD PTR [esp]
    movdqa    XMMWORD PTR 80[esp],xmm7
    pxor    xmm7,xmm1
    movups    xmm1,XMMWORD PTR 16[ebp]
    lea    edx,DWORD PTR 32[ebp]
    pxor    xmm3,XMMWORD PTR 16[esp]
DB    102,15,56,222,209
    pxor    xmm4,XMMWORD PTR 32[esp]
DB    102,15,56,222,217
    pxor    xmm5,XMMWORD PTR 48[esp]
    dec    ecx
DB    102,15,56,222,225
    pxor    xmm6,XMMWORD PTR 64[esp]
DB    102,15,56,222,233
    pxor    xmm7,xmm0
DB    102,15,56,222,241
    movups    xmm0,XMMWORD PTR [edx]
DB    102,15,56,222,249
    call    $L_aesni_decrypt6_enter
    movdqa    xmm1,XMMWORD PTR 80[esp]
    pxor    xmm0,xmm0
    xorps    xmm2,XMMWORD PTR [esp]
    pcmpgtd    xmm0,xmm1
    xorps    xmm3,XMMWORD PTR 16[esp]
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm4,XMMWORD PTR 32[esp]
    movups    XMMWORD PTR 16[edi],xmm3
    xorps    xmm5,XMMWORD PTR 48[esp]
    movups    XMMWORD PTR 32[edi],xmm4
    xorps    xmm6,XMMWORD PTR 64[esp]
    movups    XMMWORD PTR 48[edi],xmm5
    xorps    xmm7,xmm1
    movups    XMMWORD PTR 64[edi],xmm6
    pshufd    xmm2,xmm0,19
    movups    XMMWORD PTR 80[edi],xmm7
    lea    edi,DWORD PTR 96[edi]
    movdqa    xmm3,XMMWORD PTR 96[esp]
    pxor    xmm0,xmm0
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    mov    ecx,ebx
    pxor    xmm1,xmm2
    sub    eax,96
    jnc    $L057xts_dec_loop6
    lea    ecx,DWORD PTR 1[ecx*2]
    mov    edx,ebp
    mov    ebx,ecx
$L056xts_dec_short:
    add    eax,96
    jz    $L058xts_dec_done6x
    movdqa    xmm5,xmm1
    cmp    eax,32
    jb    $L059xts_dec_one
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    je    $L060xts_dec_two
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    xmm6,xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    cmp    eax,64
    jb    $L061xts_dec_three
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    xmm7,xmm1
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
    movdqa    XMMWORD PTR [esp],xmm5
    movdqa    XMMWORD PTR 16[esp],xmm6
    je    $L062xts_dec_four
    movdqa    XMMWORD PTR 32[esp],xmm7
    pshufd    xmm7,xmm0,19
    movdqa    XMMWORD PTR 48[esp],xmm1
    paddq    xmm1,xmm1
    pand    xmm7,xmm3
    pxor    xmm7,xmm1
    movdqu    xmm2,XMMWORD PTR [esi]
    movdqu    xmm3,XMMWORD PTR 16[esi]
    movdqu    xmm4,XMMWORD PTR 32[esi]
    pxor    xmm2,XMMWORD PTR [esp]
    movdqu    xmm5,XMMWORD PTR 48[esi]
    pxor    xmm3,XMMWORD PTR 16[esp]
    movdqu    xmm6,XMMWORD PTR 64[esi]
    pxor    xmm4,XMMWORD PTR 32[esp]
    lea    esi,DWORD PTR 80[esi]
    pxor    xmm5,XMMWORD PTR 48[esp]
    movdqa    XMMWORD PTR 64[esp],xmm7
    pxor    xmm6,xmm7
    call    __aesni_decrypt6
    movaps    xmm1,XMMWORD PTR 64[esp]
    xorps    xmm2,XMMWORD PTR [esp]
    xorps    xmm3,XMMWORD PTR 16[esp]
    xorps    xmm4,XMMWORD PTR 32[esp]
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm5,XMMWORD PTR 48[esp]
    movups    XMMWORD PTR 16[edi],xmm3
    xorps    xmm6,xmm1
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    movups    XMMWORD PTR 64[edi],xmm6
    lea    edi,DWORD PTR 80[edi]
    jmp    $L063xts_dec_done
ALIGN    16
$L059xts_dec_one:
    movups    xmm2,XMMWORD PTR [esi]
    lea    esi,DWORD PTR 16[esi]
    xorps    xmm2,xmm5
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L064dec1_loop_12:
DB    102,15,56,222,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L064dec1_loop_12
DB    102,15,56,223,209
    xorps    xmm2,xmm5
    movups    XMMWORD PTR [edi],xmm2
    lea    edi,DWORD PTR 16[edi]
    movdqa    xmm1,xmm5
    jmp    $L063xts_dec_done
ALIGN    16
$L060xts_dec_two:
    movaps    xmm6,xmm1
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm3,XMMWORD PTR 16[esi]
    lea    esi,DWORD PTR 32[esi]
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    call    __aesni_decrypt3
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    lea    edi,DWORD PTR 32[edi]
    movdqa    xmm1,xmm6
    jmp    $L063xts_dec_done
ALIGN    16
$L061xts_dec_three:
    movaps    xmm7,xmm1
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm3,XMMWORD PTR 16[esi]
    movups    xmm4,XMMWORD PTR 32[esi]
    lea    esi,DWORD PTR 48[esi]
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    xorps    xmm4,xmm7
    call    __aesni_decrypt3
    xorps    xmm2,xmm5
    xorps    xmm3,xmm6
    xorps    xmm4,xmm7
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    lea    edi,DWORD PTR 48[edi]
    movdqa    xmm1,xmm7
    jmp    $L063xts_dec_done
ALIGN    16
$L062xts_dec_four:
    movaps    xmm6,xmm1
    movups    xmm2,XMMWORD PTR [esi]
    movups    xmm3,XMMWORD PTR 16[esi]
    movups    xmm4,XMMWORD PTR 32[esi]
    xorps    xmm2,XMMWORD PTR [esp]
    movups    xmm5,XMMWORD PTR 48[esi]
    lea    esi,DWORD PTR 64[esi]
    xorps    xmm3,XMMWORD PTR 16[esp]
    xorps    xmm4,xmm7
    xorps    xmm5,xmm6
    call    __aesni_decrypt4
    xorps    xmm2,XMMWORD PTR [esp]
    xorps    xmm3,XMMWORD PTR 16[esp]
    xorps    xmm4,xmm7
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm5,xmm6
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    lea    edi,DWORD PTR 64[edi]
    movdqa    xmm1,xmm6
    jmp    $L063xts_dec_done
ALIGN    16
$L058xts_dec_done6x:
    mov    eax,DWORD PTR 112[esp]
    and    eax,15
    jz    $L065xts_dec_ret
    mov    DWORD PTR 112[esp],eax
    jmp    $L066xts_dec_only_one_more
ALIGN    16
$L063xts_dec_done:
    mov    eax,DWORD PTR 112[esp]
    pxor    xmm0,xmm0
    and    eax,15
    jz    $L065xts_dec_ret
    pcmpgtd    xmm0,xmm1
    mov    DWORD PTR 112[esp],eax
    pshufd    xmm2,xmm0,19
    pxor    xmm0,xmm0
    movdqa    xmm3,XMMWORD PTR 96[esp]
    paddq    xmm1,xmm1
    pand    xmm2,xmm3
    pcmpgtd    xmm0,xmm1
    pxor    xmm1,xmm2
$L066xts_dec_only_one_more:
    pshufd    xmm5,xmm0,19
    movdqa    xmm6,xmm1
    paddq    xmm1,xmm1
    pand    xmm5,xmm3
    pxor    xmm5,xmm1
    mov    edx,ebp
    mov    ecx,ebx
    movups    xmm2,XMMWORD PTR [esi]
    xorps    xmm2,xmm5
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L067dec1_loop_13:
DB    102,15,56,222,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L067dec1_loop_13
DB    102,15,56,223,209
    xorps    xmm2,xmm5
    movups    XMMWORD PTR [edi],xmm2
$L068xts_dec_steal:
    movzx    ecx,BYTE PTR 16[esi]
    movzx    edx,BYTE PTR [edi]
    lea    esi,DWORD PTR 1[esi]
    mov    BYTE PTR [edi],cl
    mov    BYTE PTR 16[edi],dl
    lea    edi,DWORD PTR 1[edi]
    sub    eax,1
    jnz    $L068xts_dec_steal
    sub    edi,DWORD PTR 112[esp]
    mov    edx,ebp
    mov    ecx,ebx
    movups    xmm2,XMMWORD PTR [edi]
    xorps    xmm2,xmm6
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L069dec1_loop_14:
DB    102,15,56,222,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L069dec1_loop_14
DB    102,15,56,223,209
    xorps    xmm2,xmm6
    movups    XMMWORD PTR [edi],xmm2
$L065xts_dec_ret:
    mov    esp,DWORD PTR 116[esp]
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_aesni_xts_decrypt ENDP
ALIGN    16
_aesni_cbc_encrypt    PROC PUBLIC
$L_aesni_cbc_encrypt_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    esi,DWORD PTR 20[esp]
    mov    ebx,esp
    mov    edi,DWORD PTR 24[esp]
    sub    ebx,24
    mov    eax,DWORD PTR 28[esp]
    and    ebx,-16
    mov    edx,DWORD PTR 32[esp]
    mov    ebp,DWORD PTR 36[esp]
    test    eax,eax
    jz    $L070cbc_abort
    cmp    DWORD PTR 40[esp],0
    xchg    ebx,esp
    movups    xmm7,XMMWORD PTR [ebp]
    mov    ecx,DWORD PTR 240[edx]
    mov    ebp,edx
    mov    DWORD PTR 16[esp],ebx
    mov    ebx,ecx
    je    $L071cbc_decrypt
    movaps    xmm2,xmm7
    cmp    eax,16
    jb    $L072cbc_enc_tail
    sub    eax,16
    jmp    $L073cbc_enc_loop
ALIGN    16
$L073cbc_enc_loop:
    movups    xmm7,XMMWORD PTR [esi]
    lea    esi,DWORD PTR 16[esi]
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    xorps    xmm7,xmm0
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm7
$L074enc1_loop_15:
DB    102,15,56,220,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L074enc1_loop_15
DB    102,15,56,221,209
    mov    ecx,ebx
    mov    edx,ebp
    movups    XMMWORD PTR [edi],xmm2
    lea    edi,DWORD PTR 16[edi]
    sub    eax,16
    jnc    $L073cbc_enc_loop
    add    eax,16
    jnz    $L072cbc_enc_tail
    movaps    xmm7,xmm2
    jmp    $L075cbc_ret
$L072cbc_enc_tail:
    mov    ecx,eax
DD    2767451785
    mov    ecx,16
    sub    ecx,eax
    xor    eax,eax
DD    2868115081
    lea    edi,DWORD PTR [edi-16]
    mov    ecx,ebx
    mov    esi,edi
    mov    edx,ebp
    jmp    $L073cbc_enc_loop
ALIGN    16
$L071cbc_decrypt:
    cmp    eax,80
    jbe    $L076cbc_dec_tail
    movaps    XMMWORD PTR [esp],xmm7
    sub    eax,80
    jmp    $L077cbc_dec_loop6_enter
ALIGN    16
$L078cbc_dec_loop6:
    movaps    XMMWORD PTR [esp],xmm0
    movups    XMMWORD PTR [edi],xmm7
    lea    edi,DWORD PTR 16[edi]
$L077cbc_dec_loop6_enter:
    movdqu    xmm2,XMMWORD PTR [esi]
    movdqu    xmm3,XMMWORD PTR 16[esi]
    movdqu    xmm4,XMMWORD PTR 32[esi]
    movdqu    xmm5,XMMWORD PTR 48[esi]
    movdqu    xmm6,XMMWORD PTR 64[esi]
    movdqu    xmm7,XMMWORD PTR 80[esi]
    call    __aesni_decrypt6
    movups    xmm1,XMMWORD PTR [esi]
    movups    xmm0,XMMWORD PTR 16[esi]
    xorps    xmm2,XMMWORD PTR [esp]
    xorps    xmm3,xmm1
    movups    xmm1,XMMWORD PTR 32[esi]
    xorps    xmm4,xmm0
    movups    xmm0,XMMWORD PTR 48[esi]
    xorps    xmm5,xmm1
    movups    xmm1,XMMWORD PTR 64[esi]
    xorps    xmm6,xmm0
    movups    xmm0,XMMWORD PTR 80[esi]
    xorps    xmm7,xmm1
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    lea    esi,DWORD PTR 96[esi]
    movups    XMMWORD PTR 32[edi],xmm4
    mov    ecx,ebx
    movups    XMMWORD PTR 48[edi],xmm5
    mov    edx,ebp
    movups    XMMWORD PTR 64[edi],xmm6
    lea    edi,DWORD PTR 80[edi]
    sub    eax,96
    ja    $L078cbc_dec_loop6
    movaps    xmm2,xmm7
    movaps    xmm7,xmm0
    add    eax,80
    jle    $L079cbc_dec_tail_collected
    movups    XMMWORD PTR [edi],xmm2
    lea    edi,DWORD PTR 16[edi]
$L076cbc_dec_tail:
    movups    xmm2,XMMWORD PTR [esi]
    movaps    xmm6,xmm2
    cmp    eax,16
    jbe    $L080cbc_dec_one
    movups    xmm3,XMMWORD PTR 16[esi]
    movaps    xmm5,xmm3
    cmp    eax,32
    jbe    $L081cbc_dec_two
    movups    xmm4,XMMWORD PTR 32[esi]
    cmp    eax,48
    jbe    $L082cbc_dec_three
    movups    xmm5,XMMWORD PTR 48[esi]
    cmp    eax,64
    jbe    $L083cbc_dec_four
    movups    xmm6,XMMWORD PTR 64[esi]
    movaps    XMMWORD PTR [esp],xmm7
    movups    xmm2,XMMWORD PTR [esi]
    xorps    xmm7,xmm7
    call    __aesni_decrypt6
    movups    xmm1,XMMWORD PTR [esi]
    movups    xmm0,XMMWORD PTR 16[esi]
    xorps    xmm2,XMMWORD PTR [esp]
    xorps    xmm3,xmm1
    movups    xmm1,XMMWORD PTR 32[esi]
    xorps    xmm4,xmm0
    movups    xmm0,XMMWORD PTR 48[esi]
    xorps    xmm5,xmm1
    movups    xmm7,XMMWORD PTR 64[esi]
    xorps    xmm6,xmm0
    movups    XMMWORD PTR [edi],xmm2
    movups    XMMWORD PTR 16[edi],xmm3
    movups    XMMWORD PTR 32[edi],xmm4
    movups    XMMWORD PTR 48[edi],xmm5
    lea    edi,DWORD PTR 64[edi]
    movaps    xmm2,xmm6
    sub    eax,80
    jmp    $L079cbc_dec_tail_collected
ALIGN    16
$L080cbc_dec_one:
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR 16[edx]
    lea    edx,DWORD PTR 32[edx]
    xorps    xmm2,xmm0
$L084dec1_loop_16:
DB    102,15,56,222,209
    dec    ecx
    movups    xmm1,XMMWORD PTR [edx]
    lea    edx,DWORD PTR 16[edx]
    jnz    $L084dec1_loop_16
DB    102,15,56,223,209
    xorps    xmm2,xmm7
    movaps    xmm7,xmm6
    sub    eax,16
    jmp    $L079cbc_dec_tail_collected
ALIGN    16
$L081cbc_dec_two:
    xorps    xmm4,xmm4
    call    __aesni_decrypt3
    xorps    xmm2,xmm7
    xorps    xmm3,xmm6
    movups    XMMWORD PTR [edi],xmm2
    movaps    xmm2,xmm3
    lea    edi,DWORD PTR 16[edi]
    movaps    xmm7,xmm5
    sub    eax,32
    jmp    $L079cbc_dec_tail_collected
ALIGN    16
$L082cbc_dec_three:
    call    __aesni_decrypt3
    xorps    xmm2,xmm7
    xorps    xmm3,xmm6
    xorps    xmm4,xmm5
    movups    XMMWORD PTR [edi],xmm2
    movaps    xmm2,xmm4
    movups    XMMWORD PTR 16[edi],xmm3
    lea    edi,DWORD PTR 32[edi]
    movups    xmm7,XMMWORD PTR 32[esi]
    sub    eax,48
    jmp    $L079cbc_dec_tail_collected
ALIGN    16
$L083cbc_dec_four:
    call    __aesni_decrypt4
    movups    xmm1,XMMWORD PTR 16[esi]
    movups    xmm0,XMMWORD PTR 32[esi]
    xorps    xmm2,xmm7
    movups    xmm7,XMMWORD PTR 48[esi]
    xorps    xmm3,xmm6
    movups    XMMWORD PTR [edi],xmm2
    xorps    xmm4,xmm1
    movups    XMMWORD PTR 16[edi],xmm3
    xorps    xmm5,xmm0
    movups    XMMWORD PTR 32[edi],xmm4
    lea    edi,DWORD PTR 48[edi]
    movaps    xmm2,xmm5
    sub    eax,64
$L079cbc_dec_tail_collected:
    and    eax,15
    jnz    $L085cbc_dec_tail_partial
    movups    XMMWORD PTR [edi],xmm2
    jmp    $L075cbc_ret
ALIGN    16
$L085cbc_dec_tail_partial:
    movaps    XMMWORD PTR [esp],xmm2
    mov    ecx,16
    mov    esi,esp
    sub    ecx,eax
DD    2767451785
$L075cbc_ret:
    mov    esp,DWORD PTR 16[esp]
    mov    ebp,DWORD PTR 36[esp]
    movups    XMMWORD PTR [ebp],xmm7
$L070cbc_abort:
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_aesni_cbc_encrypt ENDP
ALIGN    16
__aesni_set_encrypt_key    PROC PRIVATE
    test    eax,eax
    jz    $L086bad_pointer
    test    edx,edx
    jz    $L086bad_pointer
    movups    xmm0,XMMWORD PTR [eax]
    xorps    xmm4,xmm4
    lea    edx,DWORD PTR 16[edx]
    cmp    ecx,256
    je    $L08714rounds
    cmp    ecx,192
    je    $L08812rounds
    cmp    ecx,128
    jne    $L089bad_keybits
ALIGN    16
$L09010rounds:
    mov    ecx,9
    movups    XMMWORD PTR [edx-16],xmm0
DB    102,15,58,223,200,1
    call    $L091key_128_cold
DB    102,15,58,223,200,2
    call    $L092key_128
DB    102,15,58,223,200,4
    call    $L092key_128
DB    102,15,58,223,200,8
    call    $L092key_128
DB    102,15,58,223,200,16
    call    $L092key_128
DB    102,15,58,223,200,32
    call    $L092key_128
DB    102,15,58,223,200,64
    call    $L092key_128
DB    102,15,58,223,200,128
    call    $L092key_128
DB    102,15,58,223,200,27
    call    $L092key_128
DB    102,15,58,223,200,54
    call    $L092key_128
    movups    XMMWORD PTR [edx],xmm0
    mov    DWORD PTR 80[edx],ecx
    xor    eax,eax
    ret
ALIGN    16
$L092key_128:
    movups    XMMWORD PTR [edx],xmm0
    lea    edx,DWORD PTR 16[edx]
$L091key_128_cold:
    shufps    xmm4,xmm0,16
    xorps    xmm0,xmm4
    shufps    xmm4,xmm0,140
    xorps    xmm0,xmm4
    shufps    xmm1,xmm1,255
    xorps    xmm0,xmm1
    ret
ALIGN    16
$L08812rounds:
    movq    xmm2,QWORD PTR 16[eax]
    mov    ecx,11
    movups    XMMWORD PTR [edx-16],xmm0
DB    102,15,58,223,202,1
    call    $L093key_192a_cold
DB    102,15,58,223,202,2
    call    $L094key_192b
DB    102,15,58,223,202,4
    call    $L095key_192a
DB    102,15,58,223,202,8
    call    $L094key_192b
DB    102,15,58,223,202,16
    call    $L095key_192a
DB    102,15,58,223,202,32
    call    $L094key_192b
DB    102,15,58,223,202,64
    call    $L095key_192a
DB    102,15,58,223,202,128
    call    $L094key_192b
    movups    XMMWORD PTR [edx],xmm0
    mov    DWORD PTR 48[edx],ecx
    xor    eax,eax
    ret
ALIGN    16
$L095key_192a:
    movups    XMMWORD PTR [edx],xmm0
    lea    edx,DWORD PTR 16[edx]
ALIGN    16
$L093key_192a_cold:
    movaps    xmm5,xmm2
$L096key_192b_warm:
    shufps    xmm4,xmm0,16
    movdqa    xmm3,xmm2
    xorps    xmm0,xmm4
    shufps    xmm4,xmm0,140
    pslldq    xmm3,4
    xorps    xmm0,xmm4
    pshufd    xmm1,xmm1,85
    pxor    xmm2,xmm3
    pxor    xmm0,xmm1
    pshufd    xmm3,xmm0,255
    pxor    xmm2,xmm3
    ret
ALIGN    16
$L094key_192b:
    movaps    xmm3,xmm0
    shufps    xmm5,xmm0,68
    movups    XMMWORD PTR [edx],xmm5
    shufps    xmm3,xmm2,78
    movups    XMMWORD PTR 16[edx],xmm3
    lea    edx,DWORD PTR 32[edx]
    jmp    $L096key_192b_warm
ALIGN    16
$L08714rounds:
    movups    xmm2,XMMWORD PTR 16[eax]
    mov    ecx,13
    lea    edx,DWORD PTR 16[edx]
    movups    XMMWORD PTR [edx-32],xmm0
    movups    XMMWORD PTR [edx-16],xmm2
DB    102,15,58,223,202,1
    call    $L097key_256a_cold
DB    102,15,58,223,200,1
    call    $L098key_256b
DB    102,15,58,223,202,2
    call    $L099key_256a
DB    102,15,58,223,200,2
    call    $L098key_256b
DB    102,15,58,223,202,4
    call    $L099key_256a
DB    102,15,58,223,200,4
    call    $L098key_256b
DB    102,15,58,223,202,8
    call    $L099key_256a
DB    102,15,58,223,200,8
    call    $L098key_256b
DB    102,15,58,223,202,16
    call    $L099key_256a
DB    102,15,58,223,200,16
    call    $L098key_256b
DB    102,15,58,223,202,32
    call    $L099key_256a
DB    102,15,58,223,200,32
    call    $L098key_256b
DB    102,15,58,223,202,64
    call    $L099key_256a
    movups    XMMWORD PTR [edx],xmm0
    mov    DWORD PTR 16[edx],ecx
    xor    eax,eax
    ret
ALIGN    16
$L099key_256a:
    movups    XMMWORD PTR [edx],xmm2
    lea    edx,DWORD PTR 16[edx]
$L097key_256a_cold:
    shufps    xmm4,xmm0,16
    xorps    xmm0,xmm4
    shufps    xmm4,xmm0,140
    xorps    xmm0,xmm4
    shufps    xmm1,xmm1,255
    xorps    xmm0,xmm1
    ret
ALIGN    16
$L098key_256b:
    movups    XMMWORD PTR [edx],xmm0
    lea    edx,DWORD PTR 16[edx]
    shufps    xmm4,xmm2,16
    xorps    xmm2,xmm4
    shufps    xmm4,xmm2,140
    xorps    xmm2,xmm4
    shufps    xmm1,xmm1,170
    xorps    xmm2,xmm1
    ret
ALIGN    4
$L086bad_pointer:
    mov    eax,-1
    ret
ALIGN    4
$L089bad_keybits:
    mov    eax,-2
    ret
__aesni_set_encrypt_key ENDP
ALIGN    16
_aesni_set_encrypt_key    PROC PUBLIC
$L_aesni_set_encrypt_key_begin::
    mov    eax,DWORD PTR 4[esp]
    mov    ecx,DWORD PTR 8[esp]
    mov    edx,DWORD PTR 12[esp]
    call    __aesni_set_encrypt_key
    ret
_aesni_set_encrypt_key ENDP
ALIGN    16
_aesni_set_decrypt_key    PROC PUBLIC
$L_aesni_set_decrypt_key_begin::
    mov    eax,DWORD PTR 4[esp]
    mov    ecx,DWORD PTR 8[esp]
    mov    edx,DWORD PTR 12[esp]
    call    __aesni_set_encrypt_key
    mov    edx,DWORD PTR 12[esp]
    shl    ecx,4
    test    eax,eax
    jnz    $L100dec_key_ret
    lea    eax,DWORD PTR 16[ecx*1+edx]
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR [eax]
    movups    XMMWORD PTR [eax],xmm0
    movups    XMMWORD PTR [edx],xmm1
    lea    edx,DWORD PTR 16[edx]
    lea    eax,DWORD PTR [eax-16]
$L101dec_key_inverse:
    movups    xmm0,XMMWORD PTR [edx]
    movups    xmm1,XMMWORD PTR [eax]
DB    102,15,56,219,192
DB    102,15,56,219,201
    lea    edx,DWORD PTR 16[edx]
    lea    eax,DWORD PTR [eax-16]
    movups    XMMWORD PTR 16[eax],xmm0
    movups    XMMWORD PTR [edx-16],xmm1
    cmp    eax,edx
    ja    $L101dec_key_inverse
    movups    xmm0,XMMWORD PTR [edx]
DB    102,15,56,219,192
    movups    XMMWORD PTR [edx],xmm0
    xor    eax,eax
$L100dec_key_ret:
    ret
_aesni_set_decrypt_key ENDP
DB    65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
DB    83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
DB    32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
DB    115,108,46,111,114,103,62,0
.text$    ENDS
END