ClickHouse/contrib/boringssl-cmake/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm

2807 lines
53 KiB
NASM

; This file is generated from a similarly-named Perl script in the BoringSSL
; source tree. Do not edit by hand.
default rel
%define XMMWORD
%define YMMWORD
%define ZMMWORD
%ifdef BORINGSSL_PREFIX
%include "boringssl_prefix_symbols_nasm.inc"
%endif
section .text code align=64
EXTERN OPENSSL_ia32cap_P
global aes_hw_encrypt
ALIGN 16
aes_hw_encrypt:
%ifdef BORINGSSL_DISPATCH_TEST
EXTERN BORINGSSL_function_hit
mov BYTE[((BORINGSSL_function_hit+1))],1
%endif
movups xmm2,XMMWORD[rcx]
mov eax,DWORD[240+r8]
movups xmm0,XMMWORD[r8]
movups xmm1,XMMWORD[16+r8]
lea r8,[32+r8]
xorps xmm2,xmm0
$L$oop_enc1_1:
DB 102,15,56,220,209
dec eax
movups xmm1,XMMWORD[r8]
lea r8,[16+r8]
jnz NEAR $L$oop_enc1_1
DB 102,15,56,221,209
pxor xmm0,xmm0
pxor xmm1,xmm1
movups XMMWORD[rdx],xmm2
pxor xmm2,xmm2
DB 0F3h,0C3h ;repret
global aes_hw_decrypt
ALIGN 16
aes_hw_decrypt:
movups xmm2,XMMWORD[rcx]
mov eax,DWORD[240+r8]
movups xmm0,XMMWORD[r8]
movups xmm1,XMMWORD[16+r8]
lea r8,[32+r8]
xorps xmm2,xmm0
$L$oop_dec1_2:
DB 102,15,56,222,209
dec eax
movups xmm1,XMMWORD[r8]
lea r8,[16+r8]
jnz NEAR $L$oop_dec1_2
DB 102,15,56,223,209
pxor xmm0,xmm0
pxor xmm1,xmm1
movups XMMWORD[rdx],xmm2
pxor xmm2,xmm2
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_encrypt2:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
movups xmm0,XMMWORD[32+rcx]
lea rcx,[32+rax*1+rcx]
neg rax
add rax,16
$L$enc_loop2:
DB 102,15,56,220,209
DB 102,15,56,220,217
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,220,208
DB 102,15,56,220,216
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$enc_loop2
DB 102,15,56,220,209
DB 102,15,56,220,217
DB 102,15,56,221,208
DB 102,15,56,221,216
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_decrypt2:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
movups xmm0,XMMWORD[32+rcx]
lea rcx,[32+rax*1+rcx]
neg rax
add rax,16
$L$dec_loop2:
DB 102,15,56,222,209
DB 102,15,56,222,217
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,222,208
DB 102,15,56,222,216
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$dec_loop2
DB 102,15,56,222,209
DB 102,15,56,222,217
DB 102,15,56,223,208
DB 102,15,56,223,216
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_encrypt3:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
xorps xmm4,xmm0
movups xmm0,XMMWORD[32+rcx]
lea rcx,[32+rax*1+rcx]
neg rax
add rax,16
$L$enc_loop3:
DB 102,15,56,220,209
DB 102,15,56,220,217
DB 102,15,56,220,225
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,220,208
DB 102,15,56,220,216
DB 102,15,56,220,224
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$enc_loop3
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
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_decrypt3:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
xorps xmm4,xmm0
movups xmm0,XMMWORD[32+rcx]
lea rcx,[32+rax*1+rcx]
neg rax
add rax,16
$L$dec_loop3:
DB 102,15,56,222,209
DB 102,15,56,222,217
DB 102,15,56,222,225
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$dec_loop3
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
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_encrypt4:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
xorps xmm4,xmm0
xorps xmm5,xmm0
movups xmm0,XMMWORD[32+rcx]
lea rcx,[32+rax*1+rcx]
neg rax
DB 0x0f,0x1f,0x00
add rax,16
$L$enc_loop4:
DB 102,15,56,220,209
DB 102,15,56,220,217
DB 102,15,56,220,225
DB 102,15,56,220,233
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,220,208
DB 102,15,56,220,216
DB 102,15,56,220,224
DB 102,15,56,220,232
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$enc_loop4
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
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_decrypt4:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
xorps xmm4,xmm0
xorps xmm5,xmm0
movups xmm0,XMMWORD[32+rcx]
lea rcx,[32+rax*1+rcx]
neg rax
DB 0x0f,0x1f,0x00
add rax,16
$L$dec_loop4:
DB 102,15,56,222,209
DB 102,15,56,222,217
DB 102,15,56,222,225
DB 102,15,56,222,233
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$dec_loop4
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
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_encrypt6:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
DB 102,15,56,220,209
lea rcx,[32+rax*1+rcx]
neg rax
DB 102,15,56,220,217
pxor xmm5,xmm0
pxor xmm6,xmm0
DB 102,15,56,220,225
pxor xmm7,xmm0
movups xmm0,XMMWORD[rax*1+rcx]
add rax,16
jmp NEAR $L$enc_loop6_enter
ALIGN 16
$L$enc_loop6:
DB 102,15,56,220,209
DB 102,15,56,220,217
DB 102,15,56,220,225
$L$enc_loop6_enter:
DB 102,15,56,220,233
DB 102,15,56,220,241
DB 102,15,56,220,249
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,220,208
DB 102,15,56,220,216
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[((-16))+rax*1+rcx]
jnz NEAR $L$enc_loop6
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
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_decrypt6:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
DB 102,15,56,222,209
lea rcx,[32+rax*1+rcx]
neg rax
DB 102,15,56,222,217
pxor xmm5,xmm0
pxor xmm6,xmm0
DB 102,15,56,222,225
pxor xmm7,xmm0
movups xmm0,XMMWORD[rax*1+rcx]
add rax,16
jmp NEAR $L$dec_loop6_enter
ALIGN 16
$L$dec_loop6:
DB 102,15,56,222,209
DB 102,15,56,222,217
DB 102,15,56,222,225
$L$dec_loop6_enter:
DB 102,15,56,222,233
DB 102,15,56,222,241
DB 102,15,56,222,249
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,222,208
DB 102,15,56,222,216
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[((-16))+rax*1+rcx]
jnz NEAR $L$dec_loop6
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
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_encrypt8:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
pxor xmm4,xmm0
pxor xmm5,xmm0
pxor xmm6,xmm0
lea rcx,[32+rax*1+rcx]
neg rax
DB 102,15,56,220,209
pxor xmm7,xmm0
pxor xmm8,xmm0
DB 102,15,56,220,217
pxor xmm9,xmm0
movups xmm0,XMMWORD[rax*1+rcx]
add rax,16
jmp NEAR $L$enc_loop8_inner
ALIGN 16
$L$enc_loop8:
DB 102,15,56,220,209
DB 102,15,56,220,217
$L$enc_loop8_inner:
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,68,15,56,220,193
DB 102,68,15,56,220,201
$L$enc_loop8_enter:
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,220,208
DB 102,15,56,220,216
DB 102,15,56,220,224
DB 102,15,56,220,232
DB 102,15,56,220,240
DB 102,15,56,220,248
DB 102,68,15,56,220,192
DB 102,68,15,56,220,200
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$enc_loop8
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,68,15,56,220,193
DB 102,68,15,56,220,201
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
DB 102,68,15,56,221,192
DB 102,68,15,56,221,200
DB 0F3h,0C3h ;repret
ALIGN 16
_aesni_decrypt8:
movups xmm0,XMMWORD[rcx]
shl eax,4
movups xmm1,XMMWORD[16+rcx]
xorps xmm2,xmm0
xorps xmm3,xmm0
pxor xmm4,xmm0
pxor xmm5,xmm0
pxor xmm6,xmm0
lea rcx,[32+rax*1+rcx]
neg rax
DB 102,15,56,222,209
pxor xmm7,xmm0
pxor xmm8,xmm0
DB 102,15,56,222,217
pxor xmm9,xmm0
movups xmm0,XMMWORD[rax*1+rcx]
add rax,16
jmp NEAR $L$dec_loop8_inner
ALIGN 16
$L$dec_loop8:
DB 102,15,56,222,209
DB 102,15,56,222,217
$L$dec_loop8_inner:
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,68,15,56,222,193
DB 102,68,15,56,222,201
$L$dec_loop8_enter:
movups xmm1,XMMWORD[rax*1+rcx]
add rax,32
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
DB 102,15,56,222,240
DB 102,15,56,222,248
DB 102,68,15,56,222,192
DB 102,68,15,56,222,200
movups xmm0,XMMWORD[((-16))+rax*1+rcx]
jnz NEAR $L$dec_loop8
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,68,15,56,222,193
DB 102,68,15,56,222,201
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
DB 102,68,15,56,223,192
DB 102,68,15,56,223,200
DB 0F3h,0C3h ;repret
global aes_hw_ecb_encrypt
ALIGN 16
aes_hw_ecb_encrypt:
mov QWORD[8+rsp],rdi ;WIN64 prologue
mov QWORD[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_aes_hw_ecb_encrypt:
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD[40+rsp]
lea rsp,[((-88))+rsp]
movaps XMMWORD[rsp],xmm6
movaps XMMWORD[16+rsp],xmm7
movaps XMMWORD[32+rsp],xmm8
movaps XMMWORD[48+rsp],xmm9
$L$ecb_enc_body:
and rdx,-16
jz NEAR $L$ecb_ret
mov eax,DWORD[240+rcx]
movups xmm0,XMMWORD[rcx]
mov r11,rcx
mov r10d,eax
test r8d,r8d
jz NEAR $L$ecb_decrypt
cmp rdx,0x80
jb NEAR $L$ecb_enc_tail
movdqu xmm2,XMMWORD[rdi]
movdqu xmm3,XMMWORD[16+rdi]
movdqu xmm4,XMMWORD[32+rdi]
movdqu xmm5,XMMWORD[48+rdi]
movdqu xmm6,XMMWORD[64+rdi]
movdqu xmm7,XMMWORD[80+rdi]
movdqu xmm8,XMMWORD[96+rdi]
movdqu xmm9,XMMWORD[112+rdi]
lea rdi,[128+rdi]
sub rdx,0x80
jmp NEAR $L$ecb_enc_loop8_enter
ALIGN 16
$L$ecb_enc_loop8:
movups XMMWORD[rsi],xmm2
mov rcx,r11
movdqu xmm2,XMMWORD[rdi]
mov eax,r10d
movups XMMWORD[16+rsi],xmm3
movdqu xmm3,XMMWORD[16+rdi]
movups XMMWORD[32+rsi],xmm4
movdqu xmm4,XMMWORD[32+rdi]
movups XMMWORD[48+rsi],xmm5
movdqu xmm5,XMMWORD[48+rdi]
movups XMMWORD[64+rsi],xmm6
movdqu xmm6,XMMWORD[64+rdi]
movups XMMWORD[80+rsi],xmm7
movdqu xmm7,XMMWORD[80+rdi]
movups XMMWORD[96+rsi],xmm8
movdqu xmm8,XMMWORD[96+rdi]
movups XMMWORD[112+rsi],xmm9
lea rsi,[128+rsi]
movdqu xmm9,XMMWORD[112+rdi]
lea rdi,[128+rdi]
$L$ecb_enc_loop8_enter:
call _aesni_encrypt8
sub rdx,0x80
jnc NEAR $L$ecb_enc_loop8
movups XMMWORD[rsi],xmm2
mov rcx,r11
movups XMMWORD[16+rsi],xmm3
mov eax,r10d
movups XMMWORD[32+rsi],xmm4
movups XMMWORD[48+rsi],xmm5
movups XMMWORD[64+rsi],xmm6
movups XMMWORD[80+rsi],xmm7
movups XMMWORD[96+rsi],xmm8
movups XMMWORD[112+rsi],xmm9
lea rsi,[128+rsi]
add rdx,0x80
jz NEAR $L$ecb_ret
$L$ecb_enc_tail:
movups xmm2,XMMWORD[rdi]
cmp rdx,0x20
jb NEAR $L$ecb_enc_one
movups xmm3,XMMWORD[16+rdi]
je NEAR $L$ecb_enc_two
movups xmm4,XMMWORD[32+rdi]
cmp rdx,0x40
jb NEAR $L$ecb_enc_three
movups xmm5,XMMWORD[48+rdi]
je NEAR $L$ecb_enc_four
movups xmm6,XMMWORD[64+rdi]
cmp rdx,0x60
jb NEAR $L$ecb_enc_five
movups xmm7,XMMWORD[80+rdi]
je NEAR $L$ecb_enc_six
movdqu xmm8,XMMWORD[96+rdi]
xorps xmm9,xmm9
call _aesni_encrypt8
movups XMMWORD[rsi],xmm2
movups XMMWORD[16+rsi],xmm3
movups XMMWORD[32+rsi],xmm4
movups XMMWORD[48+rsi],xmm5
movups XMMWORD[64+rsi],xmm6
movups XMMWORD[80+rsi],xmm7
movups XMMWORD[96+rsi],xmm8
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_enc_one:
movups xmm0,XMMWORD[rcx]
movups xmm1,XMMWORD[16+rcx]
lea rcx,[32+rcx]
xorps xmm2,xmm0
$L$oop_enc1_3:
DB 102,15,56,220,209
dec eax
movups xmm1,XMMWORD[rcx]
lea rcx,[16+rcx]
jnz NEAR $L$oop_enc1_3
DB 102,15,56,221,209
movups XMMWORD[rsi],xmm2
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_enc_two:
call _aesni_encrypt2
movups XMMWORD[rsi],xmm2
movups XMMWORD[16+rsi],xmm3
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_enc_three:
call _aesni_encrypt3
movups XMMWORD[rsi],xmm2
movups XMMWORD[16+rsi],xmm3
movups XMMWORD[32+rsi],xmm4
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_enc_four:
call _aesni_encrypt4
movups XMMWORD[rsi],xmm2
movups XMMWORD[16+rsi],xmm3
movups XMMWORD[32+rsi],xmm4
movups XMMWORD[48+rsi],xmm5
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_enc_five:
xorps xmm7,xmm7
call _aesni_encrypt6
movups XMMWORD[rsi],xmm2
movups XMMWORD[16+rsi],xmm3
movups XMMWORD[32+rsi],xmm4
movups XMMWORD[48+rsi],xmm5
movups XMMWORD[64+rsi],xmm6
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_enc_six:
call _aesni_encrypt6
movups XMMWORD[rsi],xmm2
movups XMMWORD[16+rsi],xmm3
movups XMMWORD[32+rsi],xmm4
movups XMMWORD[48+rsi],xmm5
movups XMMWORD[64+rsi],xmm6
movups XMMWORD[80+rsi],xmm7
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_decrypt:
cmp rdx,0x80
jb NEAR $L$ecb_dec_tail
movdqu xmm2,XMMWORD[rdi]
movdqu xmm3,XMMWORD[16+rdi]
movdqu xmm4,XMMWORD[32+rdi]
movdqu xmm5,XMMWORD[48+rdi]
movdqu xmm6,XMMWORD[64+rdi]
movdqu xmm7,XMMWORD[80+rdi]
movdqu xmm8,XMMWORD[96+rdi]
movdqu xmm9,XMMWORD[112+rdi]
lea rdi,[128+rdi]
sub rdx,0x80
jmp NEAR $L$ecb_dec_loop8_enter
ALIGN 16
$L$ecb_dec_loop8:
movups XMMWORD[rsi],xmm2
mov rcx,r11
movdqu xmm2,XMMWORD[rdi]
mov eax,r10d
movups XMMWORD[16+rsi],xmm3
movdqu xmm3,XMMWORD[16+rdi]
movups XMMWORD[32+rsi],xmm4
movdqu xmm4,XMMWORD[32+rdi]
movups XMMWORD[48+rsi],xmm5
movdqu xmm5,XMMWORD[48+rdi]
movups XMMWORD[64+rsi],xmm6
movdqu xmm6,XMMWORD[64+rdi]
movups XMMWORD[80+rsi],xmm7
movdqu xmm7,XMMWORD[80+rdi]
movups XMMWORD[96+rsi],xmm8
movdqu xmm8,XMMWORD[96+rdi]
movups XMMWORD[112+rsi],xmm9
lea rsi,[128+rsi]
movdqu xmm9,XMMWORD[112+rdi]
lea rdi,[128+rdi]
$L$ecb_dec_loop8_enter:
call _aesni_decrypt8
movups xmm0,XMMWORD[r11]
sub rdx,0x80
jnc NEAR $L$ecb_dec_loop8
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
mov rcx,r11
movups XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
mov eax,r10d
movups XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
movups XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
movups XMMWORD[64+rsi],xmm6
pxor xmm6,xmm6
movups XMMWORD[80+rsi],xmm7
pxor xmm7,xmm7
movups XMMWORD[96+rsi],xmm8
pxor xmm8,xmm8
movups XMMWORD[112+rsi],xmm9
pxor xmm9,xmm9
lea rsi,[128+rsi]
add rdx,0x80
jz NEAR $L$ecb_ret
$L$ecb_dec_tail:
movups xmm2,XMMWORD[rdi]
cmp rdx,0x20
jb NEAR $L$ecb_dec_one
movups xmm3,XMMWORD[16+rdi]
je NEAR $L$ecb_dec_two
movups xmm4,XMMWORD[32+rdi]
cmp rdx,0x40
jb NEAR $L$ecb_dec_three
movups xmm5,XMMWORD[48+rdi]
je NEAR $L$ecb_dec_four
movups xmm6,XMMWORD[64+rdi]
cmp rdx,0x60
jb NEAR $L$ecb_dec_five
movups xmm7,XMMWORD[80+rdi]
je NEAR $L$ecb_dec_six
movups xmm8,XMMWORD[96+rdi]
movups xmm0,XMMWORD[rcx]
xorps xmm9,xmm9
call _aesni_decrypt8
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
movups XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
movups XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
movups XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
movups XMMWORD[64+rsi],xmm6
pxor xmm6,xmm6
movups XMMWORD[80+rsi],xmm7
pxor xmm7,xmm7
movups XMMWORD[96+rsi],xmm8
pxor xmm8,xmm8
pxor xmm9,xmm9
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_dec_one:
movups xmm0,XMMWORD[rcx]
movups xmm1,XMMWORD[16+rcx]
lea rcx,[32+rcx]
xorps xmm2,xmm0
$L$oop_dec1_4:
DB 102,15,56,222,209
dec eax
movups xmm1,XMMWORD[rcx]
lea rcx,[16+rcx]
jnz NEAR $L$oop_dec1_4
DB 102,15,56,223,209
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_dec_two:
call _aesni_decrypt2
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
movups XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_dec_three:
call _aesni_decrypt3
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
movups XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
movups XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_dec_four:
call _aesni_decrypt4
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
movups XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
movups XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
movups XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_dec_five:
xorps xmm7,xmm7
call _aesni_decrypt6
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
movups XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
movups XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
movups XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
movups XMMWORD[64+rsi],xmm6
pxor xmm6,xmm6
pxor xmm7,xmm7
jmp NEAR $L$ecb_ret
ALIGN 16
$L$ecb_dec_six:
call _aesni_decrypt6
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
movups XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
movups XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
movups XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
movups XMMWORD[64+rsi],xmm6
pxor xmm6,xmm6
movups XMMWORD[80+rsi],xmm7
pxor xmm7,xmm7
$L$ecb_ret:
xorps xmm0,xmm0
pxor xmm1,xmm1
movaps xmm6,XMMWORD[rsp]
movaps XMMWORD[rsp],xmm0
movaps xmm7,XMMWORD[16+rsp]
movaps XMMWORD[16+rsp],xmm0
movaps xmm8,XMMWORD[32+rsp]
movaps XMMWORD[32+rsp],xmm0
movaps xmm9,XMMWORD[48+rsp]
movaps XMMWORD[48+rsp],xmm0
lea rsp,[88+rsp]
$L$ecb_enc_ret:
mov rdi,QWORD[8+rsp] ;WIN64 epilogue
mov rsi,QWORD[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_aes_hw_ecb_encrypt:
global aes_hw_ctr32_encrypt_blocks
ALIGN 16
aes_hw_ctr32_encrypt_blocks:
mov QWORD[8+rsp],rdi ;WIN64 prologue
mov QWORD[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_aes_hw_ctr32_encrypt_blocks:
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD[40+rsp]
%ifdef BORINGSSL_DISPATCH_TEST
mov BYTE[BORINGSSL_function_hit],1
%endif
cmp rdx,1
jne NEAR $L$ctr32_bulk
movups xmm2,XMMWORD[r8]
movups xmm3,XMMWORD[rdi]
mov edx,DWORD[240+rcx]
movups xmm0,XMMWORD[rcx]
movups xmm1,XMMWORD[16+rcx]
lea rcx,[32+rcx]
xorps xmm2,xmm0
$L$oop_enc1_5:
DB 102,15,56,220,209
dec edx
movups xmm1,XMMWORD[rcx]
lea rcx,[16+rcx]
jnz NEAR $L$oop_enc1_5
DB 102,15,56,221,209
pxor xmm0,xmm0
pxor xmm1,xmm1
xorps xmm2,xmm3
pxor xmm3,xmm3
movups XMMWORD[rsi],xmm2
xorps xmm2,xmm2
jmp NEAR $L$ctr32_epilogue
ALIGN 16
$L$ctr32_bulk:
lea r11,[rsp]
push rbp
sub rsp,288
and rsp,-16
movaps XMMWORD[(-168)+r11],xmm6
movaps XMMWORD[(-152)+r11],xmm7
movaps XMMWORD[(-136)+r11],xmm8
movaps XMMWORD[(-120)+r11],xmm9
movaps XMMWORD[(-104)+r11],xmm10
movaps XMMWORD[(-88)+r11],xmm11
movaps XMMWORD[(-72)+r11],xmm12
movaps XMMWORD[(-56)+r11],xmm13
movaps XMMWORD[(-40)+r11],xmm14
movaps XMMWORD[(-24)+r11],xmm15
$L$ctr32_body:
movdqu xmm2,XMMWORD[r8]
movdqu xmm0,XMMWORD[rcx]
mov r8d,DWORD[12+r8]
pxor xmm2,xmm0
mov ebp,DWORD[12+rcx]
movdqa XMMWORD[rsp],xmm2
bswap r8d
movdqa xmm3,xmm2
movdqa xmm4,xmm2
movdqa xmm5,xmm2
movdqa XMMWORD[64+rsp],xmm2
movdqa XMMWORD[80+rsp],xmm2
movdqa XMMWORD[96+rsp],xmm2
mov r10,rdx
movdqa XMMWORD[112+rsp],xmm2
lea rax,[1+r8]
lea rdx,[2+r8]
bswap eax
bswap edx
xor eax,ebp
xor edx,ebp
DB 102,15,58,34,216,3
lea rax,[3+r8]
movdqa XMMWORD[16+rsp],xmm3
DB 102,15,58,34,226,3
bswap eax
mov rdx,r10
lea r10,[4+r8]
movdqa XMMWORD[32+rsp],xmm4
xor eax,ebp
bswap r10d
DB 102,15,58,34,232,3
xor r10d,ebp
movdqa XMMWORD[48+rsp],xmm5
lea r9,[5+r8]
mov DWORD[((64+12))+rsp],r10d
bswap r9d
lea r10,[6+r8]
mov eax,DWORD[240+rcx]
xor r9d,ebp
bswap r10d
mov DWORD[((80+12))+rsp],r9d
xor r10d,ebp
lea r9,[7+r8]
mov DWORD[((96+12))+rsp],r10d
bswap r9d
lea r10,[OPENSSL_ia32cap_P]
mov r10d,DWORD[4+r10]
xor r9d,ebp
and r10d,71303168
mov DWORD[((112+12))+rsp],r9d
movups xmm1,XMMWORD[16+rcx]
movdqa xmm6,XMMWORD[64+rsp]
movdqa xmm7,XMMWORD[80+rsp]
cmp rdx,8
jb NEAR $L$ctr32_tail
sub rdx,6
cmp r10d,4194304
je NEAR $L$ctr32_6x
lea rcx,[128+rcx]
sub rdx,2
jmp NEAR $L$ctr32_loop8
ALIGN 16
$L$ctr32_6x:
shl eax,4
mov r10d,48
bswap ebp
lea rcx,[32+rax*1+rcx]
sub r10,rax
jmp NEAR $L$ctr32_loop6
ALIGN 16
$L$ctr32_loop6:
add r8d,6
movups xmm0,XMMWORD[((-48))+r10*1+rcx]
DB 102,15,56,220,209
mov eax,r8d
xor eax,ebp
DB 102,15,56,220,217
DB 0x0f,0x38,0xf1,0x44,0x24,12
lea eax,[1+r8]
DB 102,15,56,220,225
xor eax,ebp
DB 0x0f,0x38,0xf1,0x44,0x24,28
DB 102,15,56,220,233
lea eax,[2+r8]
xor eax,ebp
DB 102,15,56,220,241
DB 0x0f,0x38,0xf1,0x44,0x24,44
lea eax,[3+r8]
DB 102,15,56,220,249
movups xmm1,XMMWORD[((-32))+r10*1+rcx]
xor eax,ebp
DB 102,15,56,220,208
DB 0x0f,0x38,0xf1,0x44,0x24,60
lea eax,[4+r8]
DB 102,15,56,220,216
xor eax,ebp
DB 0x0f,0x38,0xf1,0x44,0x24,76
DB 102,15,56,220,224
lea eax,[5+r8]
xor eax,ebp
DB 102,15,56,220,232
DB 0x0f,0x38,0xf1,0x44,0x24,92
mov rax,r10
DB 102,15,56,220,240
DB 102,15,56,220,248
movups xmm0,XMMWORD[((-16))+r10*1+rcx]
call $L$enc_loop6
movdqu xmm8,XMMWORD[rdi]
movdqu xmm9,XMMWORD[16+rdi]
movdqu xmm10,XMMWORD[32+rdi]
movdqu xmm11,XMMWORD[48+rdi]
movdqu xmm12,XMMWORD[64+rdi]
movdqu xmm13,XMMWORD[80+rdi]
lea rdi,[96+rdi]
movups xmm1,XMMWORD[((-64))+r10*1+rcx]
pxor xmm8,xmm2
movaps xmm2,XMMWORD[rsp]
pxor xmm9,xmm3
movaps xmm3,XMMWORD[16+rsp]
pxor xmm10,xmm4
movaps xmm4,XMMWORD[32+rsp]
pxor xmm11,xmm5
movaps xmm5,XMMWORD[48+rsp]
pxor xmm12,xmm6
movaps xmm6,XMMWORD[64+rsp]
pxor xmm13,xmm7
movaps xmm7,XMMWORD[80+rsp]
movdqu XMMWORD[rsi],xmm8
movdqu XMMWORD[16+rsi],xmm9
movdqu XMMWORD[32+rsi],xmm10
movdqu XMMWORD[48+rsi],xmm11
movdqu XMMWORD[64+rsi],xmm12
movdqu XMMWORD[80+rsi],xmm13
lea rsi,[96+rsi]
sub rdx,6
jnc NEAR $L$ctr32_loop6
add rdx,6
jz NEAR $L$ctr32_done
lea eax,[((-48))+r10]
lea rcx,[((-80))+r10*1+rcx]
neg eax
shr eax,4
jmp NEAR $L$ctr32_tail
ALIGN 32
$L$ctr32_loop8:
add r8d,8
movdqa xmm8,XMMWORD[96+rsp]
DB 102,15,56,220,209
mov r9d,r8d
movdqa xmm9,XMMWORD[112+rsp]
DB 102,15,56,220,217
bswap r9d
movups xmm0,XMMWORD[((32-128))+rcx]
DB 102,15,56,220,225
xor r9d,ebp
nop
DB 102,15,56,220,233
mov DWORD[((0+12))+rsp],r9d
lea r9,[1+r8]
DB 102,15,56,220,241
DB 102,15,56,220,249
DB 102,68,15,56,220,193
DB 102,68,15,56,220,201
movups xmm1,XMMWORD[((48-128))+rcx]
bswap r9d
DB 102,15,56,220,208
DB 102,15,56,220,216
xor r9d,ebp
DB 0x66,0x90
DB 102,15,56,220,224
DB 102,15,56,220,232
mov DWORD[((16+12))+rsp],r9d
lea r9,[2+r8]
DB 102,15,56,220,240
DB 102,15,56,220,248
DB 102,68,15,56,220,192
DB 102,68,15,56,220,200
movups xmm0,XMMWORD[((64-128))+rcx]
bswap r9d
DB 102,15,56,220,209
DB 102,15,56,220,217
xor r9d,ebp
DB 0x66,0x90
DB 102,15,56,220,225
DB 102,15,56,220,233
mov DWORD[((32+12))+rsp],r9d
lea r9,[3+r8]
DB 102,15,56,220,241
DB 102,15,56,220,249
DB 102,68,15,56,220,193
DB 102,68,15,56,220,201
movups xmm1,XMMWORD[((80-128))+rcx]
bswap r9d
DB 102,15,56,220,208
DB 102,15,56,220,216
xor r9d,ebp
DB 0x66,0x90
DB 102,15,56,220,224
DB 102,15,56,220,232
mov DWORD[((48+12))+rsp],r9d
lea r9,[4+r8]
DB 102,15,56,220,240
DB 102,15,56,220,248
DB 102,68,15,56,220,192
DB 102,68,15,56,220,200
movups xmm0,XMMWORD[((96-128))+rcx]
bswap r9d
DB 102,15,56,220,209
DB 102,15,56,220,217
xor r9d,ebp
DB 0x66,0x90
DB 102,15,56,220,225
DB 102,15,56,220,233
mov DWORD[((64+12))+rsp],r9d
lea r9,[5+r8]
DB 102,15,56,220,241
DB 102,15,56,220,249
DB 102,68,15,56,220,193
DB 102,68,15,56,220,201
movups xmm1,XMMWORD[((112-128))+rcx]
bswap r9d
DB 102,15,56,220,208
DB 102,15,56,220,216
xor r9d,ebp
DB 0x66,0x90
DB 102,15,56,220,224
DB 102,15,56,220,232
mov DWORD[((80+12))+rsp],r9d
lea r9,[6+r8]
DB 102,15,56,220,240
DB 102,15,56,220,248
DB 102,68,15,56,220,192
DB 102,68,15,56,220,200
movups xmm0,XMMWORD[((128-128))+rcx]
bswap r9d
DB 102,15,56,220,209
DB 102,15,56,220,217
xor r9d,ebp
DB 0x66,0x90
DB 102,15,56,220,225
DB 102,15,56,220,233
mov DWORD[((96+12))+rsp],r9d
lea r9,[7+r8]
DB 102,15,56,220,241
DB 102,15,56,220,249
DB 102,68,15,56,220,193
DB 102,68,15,56,220,201
movups xmm1,XMMWORD[((144-128))+rcx]
bswap r9d
DB 102,15,56,220,208
DB 102,15,56,220,216
DB 102,15,56,220,224
xor r9d,ebp
movdqu xmm10,XMMWORD[rdi]
DB 102,15,56,220,232
mov DWORD[((112+12))+rsp],r9d
cmp eax,11
DB 102,15,56,220,240
DB 102,15,56,220,248
DB 102,68,15,56,220,192
DB 102,68,15,56,220,200
movups xmm0,XMMWORD[((160-128))+rcx]
jb NEAR $L$ctr32_enc_done
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,68,15,56,220,193
DB 102,68,15,56,220,201
movups xmm1,XMMWORD[((176-128))+rcx]
DB 102,15,56,220,208
DB 102,15,56,220,216
DB 102,15,56,220,224
DB 102,15,56,220,232
DB 102,15,56,220,240
DB 102,15,56,220,248
DB 102,68,15,56,220,192
DB 102,68,15,56,220,200
movups xmm0,XMMWORD[((192-128))+rcx]
je NEAR $L$ctr32_enc_done
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,68,15,56,220,193
DB 102,68,15,56,220,201
movups xmm1,XMMWORD[((208-128))+rcx]
DB 102,15,56,220,208
DB 102,15,56,220,216
DB 102,15,56,220,224
DB 102,15,56,220,232
DB 102,15,56,220,240
DB 102,15,56,220,248
DB 102,68,15,56,220,192
DB 102,68,15,56,220,200
movups xmm0,XMMWORD[((224-128))+rcx]
jmp NEAR $L$ctr32_enc_done
ALIGN 16
$L$ctr32_enc_done:
movdqu xmm11,XMMWORD[16+rdi]
pxor xmm10,xmm0
movdqu xmm12,XMMWORD[32+rdi]
pxor xmm11,xmm0
movdqu xmm13,XMMWORD[48+rdi]
pxor xmm12,xmm0
movdqu xmm14,XMMWORD[64+rdi]
pxor xmm13,xmm0
movdqu xmm15,XMMWORD[80+rdi]
pxor xmm14,xmm0
pxor xmm15,xmm0
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,68,15,56,220,193
DB 102,68,15,56,220,201
movdqu xmm1,XMMWORD[96+rdi]
lea rdi,[128+rdi]
DB 102,65,15,56,221,210
pxor xmm1,xmm0
movdqu xmm10,XMMWORD[((112-128))+rdi]
DB 102,65,15,56,221,219
pxor xmm10,xmm0
movdqa xmm11,XMMWORD[rsp]
DB 102,65,15,56,221,228
DB 102,65,15,56,221,237
movdqa xmm12,XMMWORD[16+rsp]
movdqa xmm13,XMMWORD[32+rsp]
DB 102,65,15,56,221,246
DB 102,65,15,56,221,255
movdqa xmm14,XMMWORD[48+rsp]
movdqa xmm15,XMMWORD[64+rsp]
DB 102,68,15,56,221,193
movdqa xmm0,XMMWORD[80+rsp]
movups xmm1,XMMWORD[((16-128))+rcx]
DB 102,69,15,56,221,202
movups XMMWORD[rsi],xmm2
movdqa xmm2,xmm11
movups XMMWORD[16+rsi],xmm3
movdqa xmm3,xmm12
movups XMMWORD[32+rsi],xmm4
movdqa xmm4,xmm13
movups XMMWORD[48+rsi],xmm5
movdqa xmm5,xmm14
movups XMMWORD[64+rsi],xmm6
movdqa xmm6,xmm15
movups XMMWORD[80+rsi],xmm7
movdqa xmm7,xmm0
movups XMMWORD[96+rsi],xmm8
movups XMMWORD[112+rsi],xmm9
lea rsi,[128+rsi]
sub rdx,8
jnc NEAR $L$ctr32_loop8
add rdx,8
jz NEAR $L$ctr32_done
lea rcx,[((-128))+rcx]
$L$ctr32_tail:
lea rcx,[16+rcx]
cmp rdx,4
jb NEAR $L$ctr32_loop3
je NEAR $L$ctr32_loop4
shl eax,4
movdqa xmm8,XMMWORD[96+rsp]
pxor xmm9,xmm9
movups xmm0,XMMWORD[16+rcx]
DB 102,15,56,220,209
DB 102,15,56,220,217
lea rcx,[((32-16))+rax*1+rcx]
neg rax
DB 102,15,56,220,225
add rax,16
movups xmm10,XMMWORD[rdi]
DB 102,15,56,220,233
DB 102,15,56,220,241
movups xmm11,XMMWORD[16+rdi]
movups xmm12,XMMWORD[32+rdi]
DB 102,15,56,220,249
DB 102,68,15,56,220,193
call $L$enc_loop8_enter
movdqu xmm13,XMMWORD[48+rdi]
pxor xmm2,xmm10
movdqu xmm10,XMMWORD[64+rdi]
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
pxor xmm4,xmm12
movdqu XMMWORD[16+rsi],xmm3
pxor xmm5,xmm13
movdqu XMMWORD[32+rsi],xmm4
pxor xmm6,xmm10
movdqu XMMWORD[48+rsi],xmm5
movdqu XMMWORD[64+rsi],xmm6
cmp rdx,6
jb NEAR $L$ctr32_done
movups xmm11,XMMWORD[80+rdi]
xorps xmm7,xmm11
movups XMMWORD[80+rsi],xmm7
je NEAR $L$ctr32_done
movups xmm12,XMMWORD[96+rdi]
xorps xmm8,xmm12
movups XMMWORD[96+rsi],xmm8
jmp NEAR $L$ctr32_done
ALIGN 32
$L$ctr32_loop4:
DB 102,15,56,220,209
lea rcx,[16+rcx]
dec eax
DB 102,15,56,220,217
DB 102,15,56,220,225
DB 102,15,56,220,233
movups xmm1,XMMWORD[rcx]
jnz NEAR $L$ctr32_loop4
DB 102,15,56,221,209
DB 102,15,56,221,217
movups xmm10,XMMWORD[rdi]
movups xmm11,XMMWORD[16+rdi]
DB 102,15,56,221,225
DB 102,15,56,221,233
movups xmm12,XMMWORD[32+rdi]
movups xmm13,XMMWORD[48+rdi]
xorps xmm2,xmm10
movups XMMWORD[rsi],xmm2
xorps xmm3,xmm11
movups XMMWORD[16+rsi],xmm3
pxor xmm4,xmm12
movdqu XMMWORD[32+rsi],xmm4
pxor xmm5,xmm13
movdqu XMMWORD[48+rsi],xmm5
jmp NEAR $L$ctr32_done
ALIGN 32
$L$ctr32_loop3:
DB 102,15,56,220,209
lea rcx,[16+rcx]
dec eax
DB 102,15,56,220,217
DB 102,15,56,220,225
movups xmm1,XMMWORD[rcx]
jnz NEAR $L$ctr32_loop3
DB 102,15,56,221,209
DB 102,15,56,221,217
DB 102,15,56,221,225
movups xmm10,XMMWORD[rdi]
xorps xmm2,xmm10
movups XMMWORD[rsi],xmm2
cmp rdx,2
jb NEAR $L$ctr32_done
movups xmm11,XMMWORD[16+rdi]
xorps xmm3,xmm11
movups XMMWORD[16+rsi],xmm3
je NEAR $L$ctr32_done
movups xmm12,XMMWORD[32+rdi]
xorps xmm4,xmm12
movups XMMWORD[32+rsi],xmm4
$L$ctr32_done:
xorps xmm0,xmm0
xor ebp,ebp
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
movaps xmm6,XMMWORD[((-168))+r11]
movaps XMMWORD[(-168)+r11],xmm0
movaps xmm7,XMMWORD[((-152))+r11]
movaps XMMWORD[(-152)+r11],xmm0
movaps xmm8,XMMWORD[((-136))+r11]
movaps XMMWORD[(-136)+r11],xmm0
movaps xmm9,XMMWORD[((-120))+r11]
movaps XMMWORD[(-120)+r11],xmm0
movaps xmm10,XMMWORD[((-104))+r11]
movaps XMMWORD[(-104)+r11],xmm0
movaps xmm11,XMMWORD[((-88))+r11]
movaps XMMWORD[(-88)+r11],xmm0
movaps xmm12,XMMWORD[((-72))+r11]
movaps XMMWORD[(-72)+r11],xmm0
movaps xmm13,XMMWORD[((-56))+r11]
movaps XMMWORD[(-56)+r11],xmm0
movaps xmm14,XMMWORD[((-40))+r11]
movaps XMMWORD[(-40)+r11],xmm0
movaps xmm15,XMMWORD[((-24))+r11]
movaps XMMWORD[(-24)+r11],xmm0
movaps XMMWORD[rsp],xmm0
movaps XMMWORD[16+rsp],xmm0
movaps XMMWORD[32+rsp],xmm0
movaps XMMWORD[48+rsp],xmm0
movaps XMMWORD[64+rsp],xmm0
movaps XMMWORD[80+rsp],xmm0
movaps XMMWORD[96+rsp],xmm0
movaps XMMWORD[112+rsp],xmm0
mov rbp,QWORD[((-8))+r11]
lea rsp,[r11]
$L$ctr32_epilogue:
mov rdi,QWORD[8+rsp] ;WIN64 epilogue
mov rsi,QWORD[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_aes_hw_ctr32_encrypt_blocks:
global aes_hw_cbc_encrypt
ALIGN 16
aes_hw_cbc_encrypt:
mov QWORD[8+rsp],rdi ;WIN64 prologue
mov QWORD[16+rsp],rsi
mov rax,rsp
$L$SEH_begin_aes_hw_cbc_encrypt:
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
mov rcx,r9
mov r8,QWORD[40+rsp]
mov r9,QWORD[48+rsp]
test rdx,rdx
jz NEAR $L$cbc_ret
mov r10d,DWORD[240+rcx]
mov r11,rcx
test r9d,r9d
jz NEAR $L$cbc_decrypt
movups xmm2,XMMWORD[r8]
mov eax,r10d
cmp rdx,16
jb NEAR $L$cbc_enc_tail
sub rdx,16
jmp NEAR $L$cbc_enc_loop
ALIGN 16
$L$cbc_enc_loop:
movups xmm3,XMMWORD[rdi]
lea rdi,[16+rdi]
movups xmm0,XMMWORD[rcx]
movups xmm1,XMMWORD[16+rcx]
xorps xmm3,xmm0
lea rcx,[32+rcx]
xorps xmm2,xmm3
$L$oop_enc1_6:
DB 102,15,56,220,209
dec eax
movups xmm1,XMMWORD[rcx]
lea rcx,[16+rcx]
jnz NEAR $L$oop_enc1_6
DB 102,15,56,221,209
mov eax,r10d
mov rcx,r11
movups XMMWORD[rsi],xmm2
lea rsi,[16+rsi]
sub rdx,16
jnc NEAR $L$cbc_enc_loop
add rdx,16
jnz NEAR $L$cbc_enc_tail
pxor xmm0,xmm0
pxor xmm1,xmm1
movups XMMWORD[r8],xmm2
pxor xmm2,xmm2
pxor xmm3,xmm3
jmp NEAR $L$cbc_ret
$L$cbc_enc_tail:
mov rcx,rdx
xchg rsi,rdi
DD 0x9066A4F3
mov ecx,16
sub rcx,rdx
xor eax,eax
DD 0x9066AAF3
lea rdi,[((-16))+rdi]
mov eax,r10d
mov rsi,rdi
mov rcx,r11
xor rdx,rdx
jmp NEAR $L$cbc_enc_loop
ALIGN 16
$L$cbc_decrypt:
cmp rdx,16
jne NEAR $L$cbc_decrypt_bulk
movdqu xmm2,XMMWORD[rdi]
movdqu xmm3,XMMWORD[r8]
movdqa xmm4,xmm2
movups xmm0,XMMWORD[rcx]
movups xmm1,XMMWORD[16+rcx]
lea rcx,[32+rcx]
xorps xmm2,xmm0
$L$oop_dec1_7:
DB 102,15,56,222,209
dec r10d
movups xmm1,XMMWORD[rcx]
lea rcx,[16+rcx]
jnz NEAR $L$oop_dec1_7
DB 102,15,56,223,209
pxor xmm0,xmm0
pxor xmm1,xmm1
movdqu XMMWORD[r8],xmm4
xorps xmm2,xmm3
pxor xmm3,xmm3
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
jmp NEAR $L$cbc_ret
ALIGN 16
$L$cbc_decrypt_bulk:
lea r11,[rsp]
push rbp
sub rsp,176
and rsp,-16
movaps XMMWORD[16+rsp],xmm6
movaps XMMWORD[32+rsp],xmm7
movaps XMMWORD[48+rsp],xmm8
movaps XMMWORD[64+rsp],xmm9
movaps XMMWORD[80+rsp],xmm10
movaps XMMWORD[96+rsp],xmm11
movaps XMMWORD[112+rsp],xmm12
movaps XMMWORD[128+rsp],xmm13
movaps XMMWORD[144+rsp],xmm14
movaps XMMWORD[160+rsp],xmm15
$L$cbc_decrypt_body:
mov rbp,rcx
movups xmm10,XMMWORD[r8]
mov eax,r10d
cmp rdx,0x50
jbe NEAR $L$cbc_dec_tail
movups xmm0,XMMWORD[rcx]
movdqu xmm2,XMMWORD[rdi]
movdqu xmm3,XMMWORD[16+rdi]
movdqa xmm11,xmm2
movdqu xmm4,XMMWORD[32+rdi]
movdqa xmm12,xmm3
movdqu xmm5,XMMWORD[48+rdi]
movdqa xmm13,xmm4
movdqu xmm6,XMMWORD[64+rdi]
movdqa xmm14,xmm5
movdqu xmm7,XMMWORD[80+rdi]
movdqa xmm15,xmm6
lea r9,[OPENSSL_ia32cap_P]
mov r9d,DWORD[4+r9]
cmp rdx,0x70
jbe NEAR $L$cbc_dec_six_or_seven
and r9d,71303168
sub rdx,0x50
cmp r9d,4194304
je NEAR $L$cbc_dec_loop6_enter
sub rdx,0x20
lea rcx,[112+rcx]
jmp NEAR $L$cbc_dec_loop8_enter
ALIGN 16
$L$cbc_dec_loop8:
movups XMMWORD[rsi],xmm9
lea rsi,[16+rsi]
$L$cbc_dec_loop8_enter:
movdqu xmm8,XMMWORD[96+rdi]
pxor xmm2,xmm0
movdqu xmm9,XMMWORD[112+rdi]
pxor xmm3,xmm0
movups xmm1,XMMWORD[((16-112))+rcx]
pxor xmm4,xmm0
mov rbp,-1
cmp rdx,0x70
pxor xmm5,xmm0
pxor xmm6,xmm0
pxor xmm7,xmm0
pxor xmm8,xmm0
DB 102,15,56,222,209
pxor xmm9,xmm0
movups xmm0,XMMWORD[((32-112))+rcx]
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,68,15,56,222,193
adc rbp,0
and rbp,128
DB 102,68,15,56,222,201
add rbp,rdi
movups xmm1,XMMWORD[((48-112))+rcx]
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
DB 102,15,56,222,240
DB 102,15,56,222,248
DB 102,68,15,56,222,192
DB 102,68,15,56,222,200
movups xmm0,XMMWORD[((64-112))+rcx]
nop
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,68,15,56,222,193
DB 102,68,15,56,222,201
movups xmm1,XMMWORD[((80-112))+rcx]
nop
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
DB 102,15,56,222,240
DB 102,15,56,222,248
DB 102,68,15,56,222,192
DB 102,68,15,56,222,200
movups xmm0,XMMWORD[((96-112))+rcx]
nop
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,68,15,56,222,193
DB 102,68,15,56,222,201
movups xmm1,XMMWORD[((112-112))+rcx]
nop
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
DB 102,15,56,222,240
DB 102,15,56,222,248
DB 102,68,15,56,222,192
DB 102,68,15,56,222,200
movups xmm0,XMMWORD[((128-112))+rcx]
nop
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,68,15,56,222,193
DB 102,68,15,56,222,201
movups xmm1,XMMWORD[((144-112))+rcx]
cmp eax,11
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
DB 102,15,56,222,240
DB 102,15,56,222,248
DB 102,68,15,56,222,192
DB 102,68,15,56,222,200
movups xmm0,XMMWORD[((160-112))+rcx]
jb NEAR $L$cbc_dec_done
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,68,15,56,222,193
DB 102,68,15,56,222,201
movups xmm1,XMMWORD[((176-112))+rcx]
nop
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
DB 102,15,56,222,240
DB 102,15,56,222,248
DB 102,68,15,56,222,192
DB 102,68,15,56,222,200
movups xmm0,XMMWORD[((192-112))+rcx]
je NEAR $L$cbc_dec_done
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,68,15,56,222,193
DB 102,68,15,56,222,201
movups xmm1,XMMWORD[((208-112))+rcx]
nop
DB 102,15,56,222,208
DB 102,15,56,222,216
DB 102,15,56,222,224
DB 102,15,56,222,232
DB 102,15,56,222,240
DB 102,15,56,222,248
DB 102,68,15,56,222,192
DB 102,68,15,56,222,200
movups xmm0,XMMWORD[((224-112))+rcx]
jmp NEAR $L$cbc_dec_done
ALIGN 16
$L$cbc_dec_done:
DB 102,15,56,222,209
DB 102,15,56,222,217
pxor xmm10,xmm0
pxor xmm11,xmm0
DB 102,15,56,222,225
DB 102,15,56,222,233
pxor xmm12,xmm0
pxor xmm13,xmm0
DB 102,15,56,222,241
DB 102,15,56,222,249
pxor xmm14,xmm0
pxor xmm15,xmm0
DB 102,68,15,56,222,193
DB 102,68,15,56,222,201
movdqu xmm1,XMMWORD[80+rdi]
DB 102,65,15,56,223,210
movdqu xmm10,XMMWORD[96+rdi]
pxor xmm1,xmm0
DB 102,65,15,56,223,219
pxor xmm10,xmm0
movdqu xmm0,XMMWORD[112+rdi]
DB 102,65,15,56,223,228
lea rdi,[128+rdi]
movdqu xmm11,XMMWORD[rbp]
DB 102,65,15,56,223,237
DB 102,65,15,56,223,246
movdqu xmm12,XMMWORD[16+rbp]
movdqu xmm13,XMMWORD[32+rbp]
DB 102,65,15,56,223,255
DB 102,68,15,56,223,193
movdqu xmm14,XMMWORD[48+rbp]
movdqu xmm15,XMMWORD[64+rbp]
DB 102,69,15,56,223,202
movdqa xmm10,xmm0
movdqu xmm1,XMMWORD[80+rbp]
movups xmm0,XMMWORD[((-112))+rcx]
movups XMMWORD[rsi],xmm2
movdqa xmm2,xmm11
movups XMMWORD[16+rsi],xmm3
movdqa xmm3,xmm12
movups XMMWORD[32+rsi],xmm4
movdqa xmm4,xmm13
movups XMMWORD[48+rsi],xmm5
movdqa xmm5,xmm14
movups XMMWORD[64+rsi],xmm6
movdqa xmm6,xmm15
movups XMMWORD[80+rsi],xmm7
movdqa xmm7,xmm1
movups XMMWORD[96+rsi],xmm8
lea rsi,[112+rsi]
sub rdx,0x80
ja NEAR $L$cbc_dec_loop8
movaps xmm2,xmm9
lea rcx,[((-112))+rcx]
add rdx,0x70
jle NEAR $L$cbc_dec_clear_tail_collected
movups XMMWORD[rsi],xmm9
lea rsi,[16+rsi]
cmp rdx,0x50
jbe NEAR $L$cbc_dec_tail
movaps xmm2,xmm11
$L$cbc_dec_six_or_seven:
cmp rdx,0x60
ja NEAR $L$cbc_dec_seven
movaps xmm8,xmm7
call _aesni_decrypt6
pxor xmm2,xmm10
movaps xmm10,xmm8
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
pxor xmm4,xmm12
movdqu XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
pxor xmm5,xmm13
movdqu XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
pxor xmm6,xmm14
movdqu XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
pxor xmm7,xmm15
movdqu XMMWORD[64+rsi],xmm6
pxor xmm6,xmm6
lea rsi,[80+rsi]
movdqa xmm2,xmm7
pxor xmm7,xmm7
jmp NEAR $L$cbc_dec_tail_collected
ALIGN 16
$L$cbc_dec_seven:
movups xmm8,XMMWORD[96+rdi]
xorps xmm9,xmm9
call _aesni_decrypt8
movups xmm9,XMMWORD[80+rdi]
pxor xmm2,xmm10
movups xmm10,XMMWORD[96+rdi]
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
pxor xmm4,xmm12
movdqu XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
pxor xmm5,xmm13
movdqu XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
pxor xmm6,xmm14
movdqu XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
pxor xmm7,xmm15
movdqu XMMWORD[64+rsi],xmm6
pxor xmm6,xmm6
pxor xmm8,xmm9
movdqu XMMWORD[80+rsi],xmm7
pxor xmm7,xmm7
lea rsi,[96+rsi]
movdqa xmm2,xmm8
pxor xmm8,xmm8
pxor xmm9,xmm9
jmp NEAR $L$cbc_dec_tail_collected
ALIGN 16
$L$cbc_dec_loop6:
movups XMMWORD[rsi],xmm7
lea rsi,[16+rsi]
movdqu xmm2,XMMWORD[rdi]
movdqu xmm3,XMMWORD[16+rdi]
movdqa xmm11,xmm2
movdqu xmm4,XMMWORD[32+rdi]
movdqa xmm12,xmm3
movdqu xmm5,XMMWORD[48+rdi]
movdqa xmm13,xmm4
movdqu xmm6,XMMWORD[64+rdi]
movdqa xmm14,xmm5
movdqu xmm7,XMMWORD[80+rdi]
movdqa xmm15,xmm6
$L$cbc_dec_loop6_enter:
lea rdi,[96+rdi]
movdqa xmm8,xmm7
call _aesni_decrypt6
pxor xmm2,xmm10
movdqa xmm10,xmm8
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
pxor xmm4,xmm12
movdqu XMMWORD[16+rsi],xmm3
pxor xmm5,xmm13
movdqu XMMWORD[32+rsi],xmm4
pxor xmm6,xmm14
mov rcx,rbp
movdqu XMMWORD[48+rsi],xmm5
pxor xmm7,xmm15
mov eax,r10d
movdqu XMMWORD[64+rsi],xmm6
lea rsi,[80+rsi]
sub rdx,0x60
ja NEAR $L$cbc_dec_loop6
movdqa xmm2,xmm7
add rdx,0x50
jle NEAR $L$cbc_dec_clear_tail_collected
movups XMMWORD[rsi],xmm7
lea rsi,[16+rsi]
$L$cbc_dec_tail:
movups xmm2,XMMWORD[rdi]
sub rdx,0x10
jbe NEAR $L$cbc_dec_one
movups xmm3,XMMWORD[16+rdi]
movaps xmm11,xmm2
sub rdx,0x10
jbe NEAR $L$cbc_dec_two
movups xmm4,XMMWORD[32+rdi]
movaps xmm12,xmm3
sub rdx,0x10
jbe NEAR $L$cbc_dec_three
movups xmm5,XMMWORD[48+rdi]
movaps xmm13,xmm4
sub rdx,0x10
jbe NEAR $L$cbc_dec_four
movups xmm6,XMMWORD[64+rdi]
movaps xmm14,xmm5
movaps xmm15,xmm6
xorps xmm7,xmm7
call _aesni_decrypt6
pxor xmm2,xmm10
movaps xmm10,xmm15
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
pxor xmm4,xmm12
movdqu XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
pxor xmm5,xmm13
movdqu XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
pxor xmm6,xmm14
movdqu XMMWORD[48+rsi],xmm5
pxor xmm5,xmm5
lea rsi,[64+rsi]
movdqa xmm2,xmm6
pxor xmm6,xmm6
pxor xmm7,xmm7
sub rdx,0x10
jmp NEAR $L$cbc_dec_tail_collected
ALIGN 16
$L$cbc_dec_one:
movaps xmm11,xmm2
movups xmm0,XMMWORD[rcx]
movups xmm1,XMMWORD[16+rcx]
lea rcx,[32+rcx]
xorps xmm2,xmm0
$L$oop_dec1_8:
DB 102,15,56,222,209
dec eax
movups xmm1,XMMWORD[rcx]
lea rcx,[16+rcx]
jnz NEAR $L$oop_dec1_8
DB 102,15,56,223,209
xorps xmm2,xmm10
movaps xmm10,xmm11
jmp NEAR $L$cbc_dec_tail_collected
ALIGN 16
$L$cbc_dec_two:
movaps xmm12,xmm3
call _aesni_decrypt2
pxor xmm2,xmm10
movaps xmm10,xmm12
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
movdqa xmm2,xmm3
pxor xmm3,xmm3
lea rsi,[16+rsi]
jmp NEAR $L$cbc_dec_tail_collected
ALIGN 16
$L$cbc_dec_three:
movaps xmm13,xmm4
call _aesni_decrypt3
pxor xmm2,xmm10
movaps xmm10,xmm13
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
pxor xmm4,xmm12
movdqu XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
movdqa xmm2,xmm4
pxor xmm4,xmm4
lea rsi,[32+rsi]
jmp NEAR $L$cbc_dec_tail_collected
ALIGN 16
$L$cbc_dec_four:
movaps xmm14,xmm5
call _aesni_decrypt4
pxor xmm2,xmm10
movaps xmm10,xmm14
pxor xmm3,xmm11
movdqu XMMWORD[rsi],xmm2
pxor xmm4,xmm12
movdqu XMMWORD[16+rsi],xmm3
pxor xmm3,xmm3
pxor xmm5,xmm13
movdqu XMMWORD[32+rsi],xmm4
pxor xmm4,xmm4
movdqa xmm2,xmm5
pxor xmm5,xmm5
lea rsi,[48+rsi]
jmp NEAR $L$cbc_dec_tail_collected
ALIGN 16
$L$cbc_dec_clear_tail_collected:
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
$L$cbc_dec_tail_collected:
movups XMMWORD[r8],xmm10
and rdx,15
jnz NEAR $L$cbc_dec_tail_partial
movups XMMWORD[rsi],xmm2
pxor xmm2,xmm2
jmp NEAR $L$cbc_dec_ret
ALIGN 16
$L$cbc_dec_tail_partial:
movaps XMMWORD[rsp],xmm2
pxor xmm2,xmm2
mov rcx,16
mov rdi,rsi
sub rcx,rdx
lea rsi,[rsp]
DD 0x9066A4F3
movdqa XMMWORD[rsp],xmm2
$L$cbc_dec_ret:
xorps xmm0,xmm0
pxor xmm1,xmm1
movaps xmm6,XMMWORD[16+rsp]
movaps XMMWORD[16+rsp],xmm0
movaps xmm7,XMMWORD[32+rsp]
movaps XMMWORD[32+rsp],xmm0
movaps xmm8,XMMWORD[48+rsp]
movaps XMMWORD[48+rsp],xmm0
movaps xmm9,XMMWORD[64+rsp]
movaps XMMWORD[64+rsp],xmm0
movaps xmm10,XMMWORD[80+rsp]
movaps XMMWORD[80+rsp],xmm0
movaps xmm11,XMMWORD[96+rsp]
movaps XMMWORD[96+rsp],xmm0
movaps xmm12,XMMWORD[112+rsp]
movaps XMMWORD[112+rsp],xmm0
movaps xmm13,XMMWORD[128+rsp]
movaps XMMWORD[128+rsp],xmm0
movaps xmm14,XMMWORD[144+rsp]
movaps XMMWORD[144+rsp],xmm0
movaps xmm15,XMMWORD[160+rsp]
movaps XMMWORD[160+rsp],xmm0
mov rbp,QWORD[((-8))+r11]
lea rsp,[r11]
$L$cbc_ret:
mov rdi,QWORD[8+rsp] ;WIN64 epilogue
mov rsi,QWORD[16+rsp]
DB 0F3h,0C3h ;repret
$L$SEH_end_aes_hw_cbc_encrypt:
global aes_hw_set_decrypt_key
ALIGN 16
aes_hw_set_decrypt_key:
DB 0x48,0x83,0xEC,0x08
call __aesni_set_encrypt_key
shl edx,4
test eax,eax
jnz NEAR $L$dec_key_ret
lea rcx,[16+rdx*1+r8]
movups xmm0,XMMWORD[r8]
movups xmm1,XMMWORD[rcx]
movups XMMWORD[rcx],xmm0
movups XMMWORD[r8],xmm1
lea r8,[16+r8]
lea rcx,[((-16))+rcx]
$L$dec_key_inverse:
movups xmm0,XMMWORD[r8]
movups xmm1,XMMWORD[rcx]
DB 102,15,56,219,192
DB 102,15,56,219,201
lea r8,[16+r8]
lea rcx,[((-16))+rcx]
movups XMMWORD[16+rcx],xmm0
movups XMMWORD[(-16)+r8],xmm1
cmp rcx,r8
ja NEAR $L$dec_key_inverse
movups xmm0,XMMWORD[r8]
DB 102,15,56,219,192
pxor xmm1,xmm1
movups XMMWORD[rcx],xmm0
pxor xmm0,xmm0
$L$dec_key_ret:
add rsp,8
DB 0F3h,0C3h ;repret
$L$SEH_end_set_decrypt_key:
global aes_hw_set_encrypt_key
ALIGN 16
aes_hw_set_encrypt_key:
__aesni_set_encrypt_key:
%ifdef BORINGSSL_DISPATCH_TEST
mov BYTE[((BORINGSSL_function_hit+3))],1
%endif
DB 0x48,0x83,0xEC,0x08
mov rax,-1
test rcx,rcx
jz NEAR $L$enc_key_ret
test r8,r8
jz NEAR $L$enc_key_ret
movups xmm0,XMMWORD[rcx]
xorps xmm4,xmm4
lea r10,[OPENSSL_ia32cap_P]
mov r10d,DWORD[4+r10]
and r10d,268437504
lea rax,[16+r8]
cmp edx,256
je NEAR $L$14rounds
cmp edx,192
je NEAR $L$12rounds
cmp edx,128
jne NEAR $L$bad_keybits
$L$10rounds:
mov edx,9
cmp r10d,268435456
je NEAR $L$10rounds_alt
movups XMMWORD[r8],xmm0
DB 102,15,58,223,200,1
call $L$key_expansion_128_cold
DB 102,15,58,223,200,2
call $L$key_expansion_128
DB 102,15,58,223,200,4
call $L$key_expansion_128
DB 102,15,58,223,200,8
call $L$key_expansion_128
DB 102,15,58,223,200,16
call $L$key_expansion_128
DB 102,15,58,223,200,32
call $L$key_expansion_128
DB 102,15,58,223,200,64
call $L$key_expansion_128
DB 102,15,58,223,200,128
call $L$key_expansion_128
DB 102,15,58,223,200,27
call $L$key_expansion_128
DB 102,15,58,223,200,54
call $L$key_expansion_128
movups XMMWORD[rax],xmm0
mov DWORD[80+rax],edx
xor eax,eax
jmp NEAR $L$enc_key_ret
ALIGN 16
$L$10rounds_alt:
movdqa xmm5,XMMWORD[$L$key_rotate]
mov r10d,8
movdqa xmm4,XMMWORD[$L$key_rcon1]
movdqa xmm2,xmm0
movdqu XMMWORD[r8],xmm0
jmp NEAR $L$oop_key128
ALIGN 16
$L$oop_key128:
DB 102,15,56,0,197
DB 102,15,56,221,196
pslld xmm4,1
lea rax,[16+rax]
movdqa xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm2,xmm3
pxor xmm0,xmm2
movdqu XMMWORD[(-16)+rax],xmm0
movdqa xmm2,xmm0
dec r10d
jnz NEAR $L$oop_key128
movdqa xmm4,XMMWORD[$L$key_rcon1b]
DB 102,15,56,0,197
DB 102,15,56,221,196
pslld xmm4,1
movdqa xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm2,xmm3
pxor xmm0,xmm2
movdqu XMMWORD[rax],xmm0
movdqa xmm2,xmm0
DB 102,15,56,0,197
DB 102,15,56,221,196
movdqa xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm2,xmm3
pxor xmm0,xmm2
movdqu XMMWORD[16+rax],xmm0
mov DWORD[96+rax],edx
xor eax,eax
jmp NEAR $L$enc_key_ret
ALIGN 16
$L$12rounds:
movq xmm2,QWORD[16+rcx]
mov edx,11
cmp r10d,268435456
je NEAR $L$12rounds_alt
movups XMMWORD[r8],xmm0
DB 102,15,58,223,202,1
call $L$key_expansion_192a_cold
DB 102,15,58,223,202,2
call $L$key_expansion_192b
DB 102,15,58,223,202,4
call $L$key_expansion_192a
DB 102,15,58,223,202,8
call $L$key_expansion_192b
DB 102,15,58,223,202,16
call $L$key_expansion_192a
DB 102,15,58,223,202,32
call $L$key_expansion_192b
DB 102,15,58,223,202,64
call $L$key_expansion_192a
DB 102,15,58,223,202,128
call $L$key_expansion_192b
movups XMMWORD[rax],xmm0
mov DWORD[48+rax],edx
xor rax,rax
jmp NEAR $L$enc_key_ret
ALIGN 16
$L$12rounds_alt:
movdqa xmm5,XMMWORD[$L$key_rotate192]
movdqa xmm4,XMMWORD[$L$key_rcon1]
mov r10d,8
movdqu XMMWORD[r8],xmm0
jmp NEAR $L$oop_key192
ALIGN 16
$L$oop_key192:
movq QWORD[rax],xmm2
movdqa xmm1,xmm2
DB 102,15,56,0,213
DB 102,15,56,221,212
pslld xmm4,1
lea rax,[24+rax]
movdqa xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm0,xmm3
pshufd xmm3,xmm0,0xff
pxor xmm3,xmm1
pslldq xmm1,4
pxor xmm3,xmm1
pxor xmm0,xmm2
pxor xmm2,xmm3
movdqu XMMWORD[(-16)+rax],xmm0
dec r10d
jnz NEAR $L$oop_key192
mov DWORD[32+rax],edx
xor eax,eax
jmp NEAR $L$enc_key_ret
ALIGN 16
$L$14rounds:
movups xmm2,XMMWORD[16+rcx]
mov edx,13
lea rax,[16+rax]
cmp r10d,268435456
je NEAR $L$14rounds_alt
movups XMMWORD[r8],xmm0
movups XMMWORD[16+r8],xmm2
DB 102,15,58,223,202,1
call $L$key_expansion_256a_cold
DB 102,15,58,223,200,1
call $L$key_expansion_256b
DB 102,15,58,223,202,2
call $L$key_expansion_256a
DB 102,15,58,223,200,2
call $L$key_expansion_256b
DB 102,15,58,223,202,4
call $L$key_expansion_256a
DB 102,15,58,223,200,4
call $L$key_expansion_256b
DB 102,15,58,223,202,8
call $L$key_expansion_256a
DB 102,15,58,223,200,8
call $L$key_expansion_256b
DB 102,15,58,223,202,16
call $L$key_expansion_256a
DB 102,15,58,223,200,16
call $L$key_expansion_256b
DB 102,15,58,223,202,32
call $L$key_expansion_256a
DB 102,15,58,223,200,32
call $L$key_expansion_256b
DB 102,15,58,223,202,64
call $L$key_expansion_256a
movups XMMWORD[rax],xmm0
mov DWORD[16+rax],edx
xor rax,rax
jmp NEAR $L$enc_key_ret
ALIGN 16
$L$14rounds_alt:
movdqa xmm5,XMMWORD[$L$key_rotate]
movdqa xmm4,XMMWORD[$L$key_rcon1]
mov r10d,7
movdqu XMMWORD[r8],xmm0
movdqa xmm1,xmm2
movdqu XMMWORD[16+r8],xmm2
jmp NEAR $L$oop_key256
ALIGN 16
$L$oop_key256:
DB 102,15,56,0,213
DB 102,15,56,221,212
movdqa xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm0,xmm3
pslld xmm4,1
pxor xmm0,xmm2
movdqu XMMWORD[rax],xmm0
dec r10d
jz NEAR $L$done_key256
pshufd xmm2,xmm0,0xff
pxor xmm3,xmm3
DB 102,15,56,221,211
movdqa xmm3,xmm1
pslldq xmm1,4
pxor xmm3,xmm1
pslldq xmm1,4
pxor xmm3,xmm1
pslldq xmm1,4
pxor xmm1,xmm3
pxor xmm2,xmm1
movdqu XMMWORD[16+rax],xmm2
lea rax,[32+rax]
movdqa xmm1,xmm2
jmp NEAR $L$oop_key256
$L$done_key256:
mov DWORD[16+rax],edx
xor eax,eax
jmp NEAR $L$enc_key_ret
ALIGN 16
$L$bad_keybits:
mov rax,-2
$L$enc_key_ret:
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
add rsp,8
DB 0F3h,0C3h ;repret
$L$SEH_end_set_encrypt_key:
ALIGN 16
$L$key_expansion_128:
movups XMMWORD[rax],xmm0
lea rax,[16+rax]
$L$key_expansion_128_cold:
shufps xmm4,xmm0,16
xorps xmm0,xmm4
shufps xmm4,xmm0,140
xorps xmm0,xmm4
shufps xmm1,xmm1,255
xorps xmm0,xmm1
DB 0F3h,0C3h ;repret
ALIGN 16
$L$key_expansion_192a:
movups XMMWORD[rax],xmm0
lea rax,[16+rax]
$L$key_expansion_192a_cold:
movaps xmm5,xmm2
$L$key_expansion_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
DB 0F3h,0C3h ;repret
ALIGN 16
$L$key_expansion_192b:
movaps xmm3,xmm0
shufps xmm5,xmm0,68
movups XMMWORD[rax],xmm5
shufps xmm3,xmm2,78
movups XMMWORD[16+rax],xmm3
lea rax,[32+rax]
jmp NEAR $L$key_expansion_192b_warm
ALIGN 16
$L$key_expansion_256a:
movups XMMWORD[rax],xmm2
lea rax,[16+rax]
$L$key_expansion_256a_cold:
shufps xmm4,xmm0,16
xorps xmm0,xmm4
shufps xmm4,xmm0,140
xorps xmm0,xmm4
shufps xmm1,xmm1,255
xorps xmm0,xmm1
DB 0F3h,0C3h ;repret
ALIGN 16
$L$key_expansion_256b:
movups XMMWORD[rax],xmm0
lea rax,[16+rax]
shufps xmm4,xmm2,16
xorps xmm2,xmm4
shufps xmm4,xmm2,140
xorps xmm2,xmm4
shufps xmm1,xmm1,170
xorps xmm2,xmm1
DB 0F3h,0C3h ;repret
ALIGN 64
$L$bswap_mask:
DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
$L$increment32:
DD 6,6,6,0
$L$increment64:
DD 1,0,0,0
$L$xts_magic:
DD 0x87,0,1,0
$L$increment1:
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
$L$key_rotate:
DD 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
$L$key_rotate192:
DD 0x04070605,0x04070605,0x04070605,0x04070605
$L$key_rcon1:
DD 1,1,1,1
$L$key_rcon1b:
DD 0x1b,0x1b,0x1b,0x1b
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
ALIGN 64
EXTERN __imp_RtlVirtualUnwind
ALIGN 16
ecb_ccm64_se_handler:
push rsi
push rdi
push rbx
push rbp
push r12
push r13
push r14
push r15
pushfq
sub rsp,64
mov rax,QWORD[120+r8]
mov rbx,QWORD[248+r8]
mov rsi,QWORD[8+r9]
mov r11,QWORD[56+r9]
mov r10d,DWORD[r11]
lea r10,[r10*1+rsi]
cmp rbx,r10
jb NEAR $L$common_seh_tail
mov rax,QWORD[152+r8]
mov r10d,DWORD[4+r11]
lea r10,[r10*1+rsi]
cmp rbx,r10
jae NEAR $L$common_seh_tail
lea rsi,[rax]
lea rdi,[512+r8]
mov ecx,8
DD 0xa548f3fc
lea rax,[88+rax]
jmp NEAR $L$common_seh_tail
ALIGN 16
ctr_xts_se_handler:
push rsi
push rdi
push rbx
push rbp
push r12
push r13
push r14
push r15
pushfq
sub rsp,64
mov rax,QWORD[120+r8]
mov rbx,QWORD[248+r8]
mov rsi,QWORD[8+r9]
mov r11,QWORD[56+r9]
mov r10d,DWORD[r11]
lea r10,[r10*1+rsi]
cmp rbx,r10
jb NEAR $L$common_seh_tail
mov rax,QWORD[152+r8]
mov r10d,DWORD[4+r11]
lea r10,[r10*1+rsi]
cmp rbx,r10
jae NEAR $L$common_seh_tail
mov rax,QWORD[208+r8]
lea rsi,[((-168))+rax]
lea rdi,[512+r8]
mov ecx,20
DD 0xa548f3fc
mov rbp,QWORD[((-8))+rax]
mov QWORD[160+r8],rbp
jmp NEAR $L$common_seh_tail
ALIGN 16
cbc_se_handler:
push rsi
push rdi
push rbx
push rbp
push r12
push r13
push r14
push r15
pushfq
sub rsp,64
mov rax,QWORD[152+r8]
mov rbx,QWORD[248+r8]
lea r10,[$L$cbc_decrypt_bulk]
cmp rbx,r10
jb NEAR $L$common_seh_tail
mov rax,QWORD[120+r8]
lea r10,[$L$cbc_decrypt_body]
cmp rbx,r10
jb NEAR $L$common_seh_tail
mov rax,QWORD[152+r8]
lea r10,[$L$cbc_ret]
cmp rbx,r10
jae NEAR $L$common_seh_tail
lea rsi,[16+rax]
lea rdi,[512+r8]
mov ecx,20
DD 0xa548f3fc
mov rax,QWORD[208+r8]
mov rbp,QWORD[((-8))+rax]
mov QWORD[160+r8],rbp
$L$common_seh_tail:
mov rdi,QWORD[8+rax]
mov rsi,QWORD[16+rax]
mov QWORD[152+r8],rax
mov QWORD[168+r8],rsi
mov QWORD[176+r8],rdi
mov rdi,QWORD[40+r9]
mov rsi,r8
mov ecx,154
DD 0xa548f3fc
mov rsi,r9
xor rcx,rcx
mov rdx,QWORD[8+rsi]
mov r8,QWORD[rsi]
mov r9,QWORD[16+rsi]
mov r10,QWORD[40+rsi]
lea r11,[56+rsi]
lea r12,[24+rsi]
mov QWORD[32+rsp],r10
mov QWORD[40+rsp],r11
mov QWORD[48+rsp],r12
mov QWORD[56+rsp],rcx
call QWORD[__imp_RtlVirtualUnwind]
mov eax,1
add rsp,64
popfq
pop r15
pop r14
pop r13
pop r12
pop rbp
pop rbx
pop rdi
pop rsi
DB 0F3h,0C3h ;repret
section .pdata rdata align=4
ALIGN 4
DD $L$SEH_begin_aes_hw_ecb_encrypt wrt ..imagebase
DD $L$SEH_end_aes_hw_ecb_encrypt wrt ..imagebase
DD $L$SEH_info_ecb wrt ..imagebase
DD $L$SEH_begin_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
DD $L$SEH_end_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
DD $L$SEH_info_ctr32 wrt ..imagebase
DD $L$SEH_begin_aes_hw_cbc_encrypt wrt ..imagebase
DD $L$SEH_end_aes_hw_cbc_encrypt wrt ..imagebase
DD $L$SEH_info_cbc wrt ..imagebase
DD aes_hw_set_decrypt_key wrt ..imagebase
DD $L$SEH_end_set_decrypt_key wrt ..imagebase
DD $L$SEH_info_key wrt ..imagebase
DD aes_hw_set_encrypt_key wrt ..imagebase
DD $L$SEH_end_set_encrypt_key wrt ..imagebase
DD $L$SEH_info_key wrt ..imagebase
section .xdata rdata align=8
ALIGN 8
$L$SEH_info_ecb:
DB 9,0,0,0
DD ecb_ccm64_se_handler wrt ..imagebase
DD $L$ecb_enc_body wrt ..imagebase,$L$ecb_enc_ret wrt ..imagebase
$L$SEH_info_ctr32:
DB 9,0,0,0
DD ctr_xts_se_handler wrt ..imagebase
DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase
$L$SEH_info_cbc:
DB 9,0,0,0
DD cbc_se_handler wrt ..imagebase
$L$SEH_info_key:
DB 0x01,0x04,0x01,0x00
DB 0x04,0x02,0x00,0x00