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

Summary

Maintainability
Test Coverage
TITLE    vpaes-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    64
$L_vpaes_consts::
DD    218628480,235210255,168496130,67568393
DD    252381056,17041926,33884169,51187212
DD    252645135,252645135,252645135,252645135
DD    1512730624,3266504856,1377990664,3401244816
DD    830229760,1275146365,2969422977,3447763452
DD    3411033600,2979783055,338359620,2782886510
DD    4209124096,907596821,221174255,1006095553
DD    191964160,3799684038,3164090317,1589111125
DD    182528256,1777043520,2877432650,3265356744
DD    1874708224,3503451415,3305285752,363511674
DD    1606117888,3487855781,1093350906,2384367825
DD    197121,67569157,134941193,202313229
DD    67569157,134941193,202313229,197121
DD    134941193,202313229,197121,67569157
DD    202313229,197121,67569157,134941193
DD    33619971,100992007,168364043,235736079
DD    235736079,33619971,100992007,168364043
DD    168364043,235736079,33619971,100992007
DD    100992007,168364043,235736079,33619971
DD    50462976,117835012,185207048,252579084
DD    252314880,51251460,117574920,184942860
DD    184682752,252054788,50987272,118359308
DD    118099200,185467140,251790600,50727180
DD    2946363062,528716217,1300004225,1881839624
DD    1532713819,1532713819,1532713819,1532713819
DD    3602276352,4288629033,3737020424,4153884961
DD    1354558464,32357713,2958822624,3775749553
DD    1201988352,132424512,1572796698,503232858
DD    2213177600,1597421020,4103937655,675398315
DD    2749646592,4273543773,1511898873,121693092
DD    3040248576,1103263732,2871565598,1608280554
DD    2236667136,2588920351,482954393,64377734
DD    3069987328,291237287,2117370568,3650299247
DD    533321216,3573750986,2572112006,1401264716
DD    1339849704,2721158661,548607111,3445553514
DD    2128193280,3054596040,2183486460,1257083700
DD    655635200,1165381986,3923443150,2344132524
DD    190078720,256924420,290342170,357187870
DD    1610966272,2263057382,4103205268,309794674
DD    2592527872,2233205587,1335446729,3402964816
DD    3973531904,3225098121,3002836325,1918774430
DD    3870401024,2102906079,2284471353,4117666579
DD    617007872,1021508343,366931923,691083277
DD    2528395776,3491914898,2968704004,1613121270
DD    3445188352,3247741094,844474987,4093578302
DD    651481088,1190302358,1689581232,574775300
DD    4289380608,206939853,2555985458,2489840491
DD    2130264064,327674451,3566485037,3349835193
DD    2470714624,316102159,3636825756,3393945945
DB    86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
DB    111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
DB    83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
DB    114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
DB    118,101,114,115,105,116,121,41,0
ALIGN    64
ALIGN    16
__vpaes_preheat    PROC PRIVATE
    add    ebp,DWORD PTR [esp]
    movdqa    xmm7,XMMWORD PTR [ebp-48]
    movdqa    xmm6,XMMWORD PTR [ebp-16]
    ret
__vpaes_preheat ENDP
ALIGN    16
__vpaes_encrypt_core    PROC PRIVATE
    mov    ecx,16
    mov    eax,DWORD PTR 240[edx]
    movdqa    xmm1,xmm6
    movdqa    xmm2,XMMWORD PTR [ebp]
    pandn    xmm1,xmm0
    movdqu    xmm5,XMMWORD PTR [edx]
    psrld    xmm1,4
    pand    xmm0,xmm6
DB    102,15,56,0,208
    movdqa    xmm0,XMMWORD PTR 16[ebp]
DB    102,15,56,0,193
    pxor    xmm2,xmm5
    pxor    xmm0,xmm2
    add    edx,16
    lea    ebx,DWORD PTR 192[ebp]
    jmp    $L000enc_entry
ALIGN    16
$L001enc_loop:
    movdqa    xmm4,XMMWORD PTR 32[ebp]
DB    102,15,56,0,226
    pxor    xmm4,xmm5
    movdqa    xmm0,XMMWORD PTR 48[ebp]
DB    102,15,56,0,195
    pxor    xmm0,xmm4
    movdqa    xmm5,XMMWORD PTR 64[ebp]
DB    102,15,56,0,234
    movdqa    xmm1,XMMWORD PTR [ecx*1+ebx-64]
    movdqa    xmm2,XMMWORD PTR 80[ebp]
DB    102,15,56,0,211
    pxor    xmm2,xmm5
    movdqa    xmm4,XMMWORD PTR [ecx*1+ebx]
    movdqa    xmm3,xmm0
DB    102,15,56,0,193
    add    edx,16
    pxor    xmm0,xmm2
DB    102,15,56,0,220
    add    ecx,16
    pxor    xmm3,xmm0
DB    102,15,56,0,193
    and    ecx,48
    pxor    xmm0,xmm3
    sub    eax,1
$L000enc_entry:
    movdqa    xmm1,xmm6
    pandn    xmm1,xmm0
    psrld    xmm1,4
    pand    xmm0,xmm6
    movdqa    xmm5,XMMWORD PTR [ebp-32]
DB    102,15,56,0,232
    pxor    xmm0,xmm1
    movdqa    xmm3,xmm7
DB    102,15,56,0,217
    pxor    xmm3,xmm5
    movdqa    xmm4,xmm7
DB    102,15,56,0,224
    pxor    xmm4,xmm5
    movdqa    xmm2,xmm7
DB    102,15,56,0,211
    pxor    xmm2,xmm0
    movdqa    xmm3,xmm7
    movdqu    xmm5,XMMWORD PTR [edx]
DB    102,15,56,0,220
    pxor    xmm3,xmm1
    jnz    $L001enc_loop
    movdqa    xmm4,XMMWORD PTR 96[ebp]
    movdqa    xmm0,XMMWORD PTR 112[ebp]
DB    102,15,56,0,226
    pxor    xmm4,xmm5
DB    102,15,56,0,195
    movdqa    xmm1,XMMWORD PTR 64[ecx*1+ebx]
    pxor    xmm0,xmm4
DB    102,15,56,0,193
    ret
__vpaes_encrypt_core ENDP
ALIGN    16
__vpaes_decrypt_core    PROC PRIVATE
    mov    eax,DWORD PTR 240[edx]
    lea    ebx,DWORD PTR 608[ebp]
    movdqa    xmm1,xmm6
    movdqa    xmm2,XMMWORD PTR [ebx-64]
    pandn    xmm1,xmm0
    mov    ecx,eax
    psrld    xmm1,4
    movdqu    xmm5,XMMWORD PTR [edx]
    shl    ecx,4
    pand    xmm0,xmm6
DB    102,15,56,0,208
    movdqa    xmm0,XMMWORD PTR [ebx-48]
    xor    ecx,48
DB    102,15,56,0,193
    and    ecx,48
    pxor    xmm2,xmm5
    movdqa    xmm5,XMMWORD PTR 176[ebp]
    pxor    xmm0,xmm2
    add    edx,16
    lea    ecx,DWORD PTR [ecx*1+ebx-352]
    jmp    $L002dec_entry
ALIGN    16
$L003dec_loop:
    movdqa    xmm4,XMMWORD PTR [ebx-32]
DB    102,15,56,0,226
    pxor    xmm4,xmm0
    movdqa    xmm0,XMMWORD PTR [ebx-16]
DB    102,15,56,0,195
    pxor    xmm0,xmm4
    add    edx,16
DB    102,15,56,0,197
    movdqa    xmm4,XMMWORD PTR [ebx]
DB    102,15,56,0,226
    pxor    xmm4,xmm0
    movdqa    xmm0,XMMWORD PTR 16[ebx]
DB    102,15,56,0,195
    pxor    xmm0,xmm4
    sub    eax,1
DB    102,15,56,0,197
    movdqa    xmm4,XMMWORD PTR 32[ebx]
DB    102,15,56,0,226
    pxor    xmm4,xmm0
    movdqa    xmm0,XMMWORD PTR 48[ebx]
DB    102,15,56,0,195
    pxor    xmm0,xmm4
DB    102,15,56,0,197
    movdqa    xmm4,XMMWORD PTR 64[ebx]
DB    102,15,56,0,226
    pxor    xmm4,xmm0
    movdqa    xmm0,XMMWORD PTR 80[ebx]
DB    102,15,56,0,195
    pxor    xmm0,xmm4
DB    102,15,58,15,237,12
$L002dec_entry:
    movdqa    xmm1,xmm6
    pandn    xmm1,xmm0
    psrld    xmm1,4
    pand    xmm0,xmm6
    movdqa    xmm2,XMMWORD PTR [ebp-32]
DB    102,15,56,0,208
    pxor    xmm0,xmm1
    movdqa    xmm3,xmm7
DB    102,15,56,0,217
    pxor    xmm3,xmm2
    movdqa    xmm4,xmm7
DB    102,15,56,0,224
    pxor    xmm4,xmm2
    movdqa    xmm2,xmm7
DB    102,15,56,0,211
    pxor    xmm2,xmm0
    movdqa    xmm3,xmm7
DB    102,15,56,0,220
    pxor    xmm3,xmm1
    movdqu    xmm0,XMMWORD PTR [edx]
    jnz    $L003dec_loop
    movdqa    xmm4,XMMWORD PTR 96[ebx]
DB    102,15,56,0,226
    pxor    xmm4,xmm0
    movdqa    xmm0,XMMWORD PTR 112[ebx]
    movdqa    xmm2,XMMWORD PTR [ecx]
DB    102,15,56,0,195
    pxor    xmm0,xmm4
DB    102,15,56,0,194
    ret
__vpaes_decrypt_core ENDP
ALIGN    16
__vpaes_schedule_core    PROC PRIVATE
    add    ebp,DWORD PTR [esp]
    movdqu    xmm0,XMMWORD PTR [esi]
    movdqa    xmm2,XMMWORD PTR 320[ebp]
    movdqa    xmm3,xmm0
    lea    ebx,DWORD PTR [ebp]
    movdqa    XMMWORD PTR 4[esp],xmm2
    call    __vpaes_schedule_transform
    movdqa    xmm7,xmm0
    test    edi,edi
    jnz    $L004schedule_am_decrypting
    movdqu    XMMWORD PTR [edx],xmm0
    jmp    $L005schedule_go
$L004schedule_am_decrypting:
    movdqa    xmm1,XMMWORD PTR 256[ecx*1+ebp]
DB    102,15,56,0,217
    movdqu    XMMWORD PTR [edx],xmm3
    xor    ecx,48
$L005schedule_go:
    cmp    eax,192
    ja    $L006schedule_256
    je    $L007schedule_192
$L008schedule_128:
    mov    eax,10
$L009loop_schedule_128:
    call    __vpaes_schedule_round
    dec    eax
    jz    $L010schedule_mangle_last
    call    __vpaes_schedule_mangle
    jmp    $L009loop_schedule_128
ALIGN    16
$L007schedule_192:
    movdqu    xmm0,XMMWORD PTR 8[esi]
    call    __vpaes_schedule_transform
    movdqa    xmm6,xmm0
    pxor    xmm4,xmm4
    movhlps    xmm6,xmm4
    mov    eax,4
$L011loop_schedule_192:
    call    __vpaes_schedule_round
DB    102,15,58,15,198,8
    call    __vpaes_schedule_mangle
    call    __vpaes_schedule_192_smear
    call    __vpaes_schedule_mangle
    call    __vpaes_schedule_round
    dec    eax
    jz    $L010schedule_mangle_last
    call    __vpaes_schedule_mangle
    call    __vpaes_schedule_192_smear
    jmp    $L011loop_schedule_192
ALIGN    16
$L006schedule_256:
    movdqu    xmm0,XMMWORD PTR 16[esi]
    call    __vpaes_schedule_transform
    mov    eax,7
$L012loop_schedule_256:
    call    __vpaes_schedule_mangle
    movdqa    xmm6,xmm0
    call    __vpaes_schedule_round
    dec    eax
    jz    $L010schedule_mangle_last
    call    __vpaes_schedule_mangle
    pshufd    xmm0,xmm0,255
    movdqa    XMMWORD PTR 20[esp],xmm7
    movdqa    xmm7,xmm6
    call    $L_vpaes_schedule_low_round
    movdqa    xmm7,XMMWORD PTR 20[esp]
    jmp    $L012loop_schedule_256
ALIGN    16
$L010schedule_mangle_last:
    lea    ebx,DWORD PTR 384[ebp]
    test    edi,edi
    jnz    $L013schedule_mangle_last_dec
    movdqa    xmm1,XMMWORD PTR 256[ecx*1+ebp]
DB    102,15,56,0,193
    lea    ebx,DWORD PTR 352[ebp]
    add    edx,32
$L013schedule_mangle_last_dec:
    add    edx,-16
    pxor    xmm0,XMMWORD PTR 336[ebp]
    call    __vpaes_schedule_transform
    movdqu    XMMWORD PTR [edx],xmm0
    pxor    xmm0,xmm0
    pxor    xmm1,xmm1
    pxor    xmm2,xmm2
    pxor    xmm3,xmm3
    pxor    xmm4,xmm4
    pxor    xmm5,xmm5
    pxor    xmm6,xmm6
    pxor    xmm7,xmm7
    ret
__vpaes_schedule_core ENDP
ALIGN    16
__vpaes_schedule_192_smear    PROC PRIVATE
    pshufd    xmm0,xmm6,128
    pxor    xmm6,xmm0
    pshufd    xmm0,xmm7,254
    pxor    xmm6,xmm0
    movdqa    xmm0,xmm6
    pxor    xmm1,xmm1
    movhlps    xmm6,xmm1
    ret
__vpaes_schedule_192_smear ENDP
ALIGN    16
__vpaes_schedule_round    PROC PRIVATE
    movdqa    xmm2,XMMWORD PTR 8[esp]
    pxor    xmm1,xmm1
DB    102,15,58,15,202,15
DB    102,15,58,15,210,15
    pxor    xmm7,xmm1
    pshufd    xmm0,xmm0,255
DB    102,15,58,15,192,1
    movdqa    XMMWORD PTR 8[esp],xmm2
$L_vpaes_schedule_low_round::
    movdqa    xmm1,xmm7
    pslldq    xmm7,4
    pxor    xmm7,xmm1
    movdqa    xmm1,xmm7
    pslldq    xmm7,8
    pxor    xmm7,xmm1
    pxor    xmm7,XMMWORD PTR 336[ebp]
    movdqa    xmm4,XMMWORD PTR [ebp-16]
    movdqa    xmm5,XMMWORD PTR [ebp-48]
    movdqa    xmm1,xmm4
    pandn    xmm1,xmm0
    psrld    xmm1,4
    pand    xmm0,xmm4
    movdqa    xmm2,XMMWORD PTR [ebp-32]
DB    102,15,56,0,208
    pxor    xmm0,xmm1
    movdqa    xmm3,xmm5
DB    102,15,56,0,217
    pxor    xmm3,xmm2
    movdqa    xmm4,xmm5
DB    102,15,56,0,224
    pxor    xmm4,xmm2
    movdqa    xmm2,xmm5
DB    102,15,56,0,211
    pxor    xmm2,xmm0
    movdqa    xmm3,xmm5
DB    102,15,56,0,220
    pxor    xmm3,xmm1
    movdqa    xmm4,XMMWORD PTR 32[ebp]
DB    102,15,56,0,226
    movdqa    xmm0,XMMWORD PTR 48[ebp]
DB    102,15,56,0,195
    pxor    xmm0,xmm4
    pxor    xmm0,xmm7
    movdqa    xmm7,xmm0
    ret
__vpaes_schedule_round ENDP
ALIGN    16
__vpaes_schedule_transform    PROC PRIVATE
    movdqa    xmm2,XMMWORD PTR [ebp-16]
    movdqa    xmm1,xmm2
    pandn    xmm1,xmm0
    psrld    xmm1,4
    pand    xmm0,xmm2
    movdqa    xmm2,XMMWORD PTR [ebx]
DB    102,15,56,0,208
    movdqa    xmm0,XMMWORD PTR 16[ebx]
DB    102,15,56,0,193
    pxor    xmm0,xmm2
    ret
__vpaes_schedule_transform ENDP
ALIGN    16
__vpaes_schedule_mangle    PROC PRIVATE
    movdqa    xmm4,xmm0
    movdqa    xmm5,XMMWORD PTR 128[ebp]
    test    edi,edi
    jnz    $L014schedule_mangle_dec
    add    edx,16
    pxor    xmm4,XMMWORD PTR 336[ebp]
DB    102,15,56,0,229
    movdqa    xmm3,xmm4
DB    102,15,56,0,229
    pxor    xmm3,xmm4
DB    102,15,56,0,229
    pxor    xmm3,xmm4
    jmp    $L015schedule_mangle_both
ALIGN    16
$L014schedule_mangle_dec:
    movdqa    xmm2,XMMWORD PTR [ebp-16]
    lea    esi,DWORD PTR 416[ebp]
    movdqa    xmm1,xmm2
    pandn    xmm1,xmm4
    psrld    xmm1,4
    pand    xmm4,xmm2
    movdqa    xmm2,XMMWORD PTR [esi]
DB    102,15,56,0,212
    movdqa    xmm3,XMMWORD PTR 16[esi]
DB    102,15,56,0,217
    pxor    xmm3,xmm2
DB    102,15,56,0,221
    movdqa    xmm2,XMMWORD PTR 32[esi]
DB    102,15,56,0,212
    pxor    xmm2,xmm3
    movdqa    xmm3,XMMWORD PTR 48[esi]
DB    102,15,56,0,217
    pxor    xmm3,xmm2
DB    102,15,56,0,221
    movdqa    xmm2,XMMWORD PTR 64[esi]
DB    102,15,56,0,212
    pxor    xmm2,xmm3
    movdqa    xmm3,XMMWORD PTR 80[esi]
DB    102,15,56,0,217
    pxor    xmm3,xmm2
DB    102,15,56,0,221
    movdqa    xmm2,XMMWORD PTR 96[esi]
DB    102,15,56,0,212
    pxor    xmm2,xmm3
    movdqa    xmm3,XMMWORD PTR 112[esi]
DB    102,15,56,0,217
    pxor    xmm3,xmm2
    add    edx,-16
$L015schedule_mangle_both:
    movdqa    xmm1,XMMWORD PTR 256[ecx*1+ebp]
DB    102,15,56,0,217
    add    ecx,-16
    and    ecx,48
    movdqu    XMMWORD PTR [edx],xmm3
    ret
__vpaes_schedule_mangle ENDP
ALIGN    16
_vpaes_set_encrypt_key    PROC PUBLIC
$L_vpaes_set_encrypt_key_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    esi,DWORD PTR 20[esp]
    lea    ebx,DWORD PTR [esp-56]
    mov    eax,DWORD PTR 24[esp]
    and    ebx,-16
    mov    edx,DWORD PTR 28[esp]
    xchg    ebx,esp
    mov    DWORD PTR 48[esp],ebx
    mov    ebx,eax
    shr    ebx,5
    add    ebx,5
    mov    DWORD PTR 240[edx],ebx
    mov    ecx,48
    mov    edi,0
    mov    ebp,OFFSET ($L_vpaes_consts+030h-$L016pic_point)
    call    __vpaes_schedule_core
$L016pic_point:
    mov    esp,DWORD PTR 48[esp]
    xor    eax,eax
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_vpaes_set_encrypt_key ENDP
ALIGN    16
_vpaes_set_decrypt_key    PROC PUBLIC
$L_vpaes_set_decrypt_key_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    esi,DWORD PTR 20[esp]
    lea    ebx,DWORD PTR [esp-56]
    mov    eax,DWORD PTR 24[esp]
    and    ebx,-16
    mov    edx,DWORD PTR 28[esp]
    xchg    ebx,esp
    mov    DWORD PTR 48[esp],ebx
    mov    ebx,eax
    shr    ebx,5
    add    ebx,5
    mov    DWORD PTR 240[edx],ebx
    shl    ebx,4
    lea    edx,DWORD PTR 16[ebx*1+edx]
    mov    edi,1
    mov    ecx,eax
    shr    ecx,1
    and    ecx,32
    xor    ecx,32
    mov    ebp,OFFSET ($L_vpaes_consts+030h-$L017pic_point)
    call    __vpaes_schedule_core
$L017pic_point:
    mov    esp,DWORD PTR 48[esp]
    xor    eax,eax
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_vpaes_set_decrypt_key ENDP
ALIGN    16
_vpaes_encrypt    PROC PUBLIC
$L_vpaes_encrypt_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    ebp,OFFSET ($L_vpaes_consts+030h-$L018pic_point)
    call    __vpaes_preheat
$L018pic_point:
    mov    esi,DWORD PTR 20[esp]
    lea    ebx,DWORD PTR [esp-56]
    mov    edi,DWORD PTR 24[esp]
    and    ebx,-16
    mov    edx,DWORD PTR 28[esp]
    xchg    ebx,esp
    mov    DWORD PTR 48[esp],ebx
    movdqu    xmm0,XMMWORD PTR [esi]
    call    __vpaes_encrypt_core
    movdqu    XMMWORD PTR [edi],xmm0
    mov    esp,DWORD PTR 48[esp]
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_vpaes_encrypt ENDP
ALIGN    16
_vpaes_decrypt    PROC PUBLIC
$L_vpaes_decrypt_begin::
    push    ebp
    push    ebx
    push    esi
    push    edi
    mov    ebp,OFFSET ($L_vpaes_consts+030h-$L019pic_point)
    call    __vpaes_preheat
$L019pic_point:
    mov    esi,DWORD PTR 20[esp]
    lea    ebx,DWORD PTR [esp-56]
    mov    edi,DWORD PTR 24[esp]
    and    ebx,-16
    mov    edx,DWORD PTR 28[esp]
    xchg    ebx,esp
    mov    DWORD PTR 48[esp],ebx
    movdqu    xmm0,XMMWORD PTR [esi]
    call    __vpaes_decrypt_core
    movdqu    XMMWORD PTR [edi],xmm0
    mov    esp,DWORD PTR 48[esp]
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_vpaes_decrypt ENDP
ALIGN    16
_vpaes_cbc_encrypt    PROC PUBLIC
$L_vpaes_cbc_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]
    sub    eax,16
    jc    $L020cbc_abort
    lea    ebx,DWORD PTR [esp-56]
    mov    ebp,DWORD PTR 36[esp]
    and    ebx,-16
    mov    ecx,DWORD PTR 40[esp]
    xchg    ebx,esp
    movdqu    xmm1,XMMWORD PTR [ebp]
    sub    edi,esi
    mov    DWORD PTR 48[esp],ebx
    mov    DWORD PTR [esp],edi
    mov    DWORD PTR 4[esp],edx
    mov    DWORD PTR 8[esp],ebp
    mov    edi,eax
    mov    ebp,OFFSET ($L_vpaes_consts+030h-$L021pic_point)
    call    __vpaes_preheat
$L021pic_point:
    cmp    ecx,0
    je    $L022cbc_dec_loop
    jmp    $L023cbc_enc_loop
ALIGN    16
$L023cbc_enc_loop:
    movdqu    xmm0,XMMWORD PTR [esi]
    pxor    xmm0,xmm1
    call    __vpaes_encrypt_core
    mov    ebx,DWORD PTR [esp]
    mov    edx,DWORD PTR 4[esp]
    movdqa    xmm1,xmm0
    movdqu    XMMWORD PTR [esi*1+ebx],xmm0
    lea    esi,DWORD PTR 16[esi]
    sub    edi,16
    jnc    $L023cbc_enc_loop
    jmp    $L024cbc_done
ALIGN    16
$L022cbc_dec_loop:
    movdqu    xmm0,XMMWORD PTR [esi]
    movdqa    XMMWORD PTR 16[esp],xmm1
    movdqa    XMMWORD PTR 32[esp],xmm0
    call    __vpaes_decrypt_core
    mov    ebx,DWORD PTR [esp]
    mov    edx,DWORD PTR 4[esp]
    pxor    xmm0,XMMWORD PTR 16[esp]
    movdqa    xmm1,XMMWORD PTR 32[esp]
    movdqu    XMMWORD PTR [esi*1+ebx],xmm0
    lea    esi,DWORD PTR 16[esi]
    sub    edi,16
    jnc    $L022cbc_dec_loop
$L024cbc_done:
    mov    ebx,DWORD PTR 8[esp]
    mov    esp,DWORD PTR 48[esp]
    movdqu    XMMWORD PTR [ebx],xmm1
$L020cbc_abort:
    pop    edi
    pop    esi
    pop    ebx
    pop    ebp
    ret
_vpaes_cbc_encrypt ENDP
.text$    ENDS
END