; This file is generated from a similarly-named Perl script in the BoringSSL ; source tree. Do not edit by hand. %ifidn __OUTPUT_FORMAT__, win64 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 section .rdata rdata align=8 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 section .text 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 %else ; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738 ret %endif