draconisplusplus/subprojects/openssl-3.0.8/generated-config/archs/VC-WIN32/asm/engines/e_padlock-x86.asm

1025 lines
17 KiB
NASM
Raw Normal View History

2025-02-20 14:49:18 -05:00
%ifidn __OUTPUT_FORMAT__,obj
section code use32 class=code align=64
%elifidn __OUTPUT_FORMAT__,win32
$@feat.00 equ 1
section .text code align=64
%else
section .text code
%endif
global _padlock_capability
align 16
_padlock_capability:
L$_padlock_capability_begin:
push ebx
pushfd
pop eax
mov ecx,eax
xor eax,2097152
push eax
popfd
pushfd
pop eax
xor ecx,eax
xor eax,eax
bt ecx,21
jnc NEAR L$000noluck
cpuid
xor eax,eax
cmp ebx,0x746e6543
jne NEAR L$001zhaoxin
cmp edx,0x48727561
jne NEAR L$000noluck
cmp ecx,0x736c7561
jne NEAR L$000noluck
jmp NEAR L$002zhaoxinEnd
L$001zhaoxin:
cmp ebx,0x68532020
jne NEAR L$000noluck
cmp edx,0x68676e61
jne NEAR L$000noluck
cmp ecx,0x20206961
jne NEAR L$000noluck
L$002zhaoxinEnd:
mov eax,3221225472
cpuid
mov edx,eax
xor eax,eax
cmp edx,3221225473
jb NEAR L$000noluck
mov eax,1
cpuid
or eax,15
xor ebx,ebx
and eax,4095
cmp eax,1791
sete bl
mov eax,3221225473
push ebx
cpuid
pop ebx
mov eax,edx
shl ebx,4
and eax,4294967279
or eax,ebx
L$000noluck:
pop ebx
ret
global _padlock_key_bswap
align 16
_padlock_key_bswap:
L$_padlock_key_bswap_begin:
mov edx,DWORD [4+esp]
mov ecx,DWORD [240+edx]
inc ecx
shl ecx,2
L$003bswap_loop:
mov eax,DWORD [edx]
bswap eax
mov DWORD [edx],eax
lea edx,[4+edx]
sub ecx,1
jnz NEAR L$003bswap_loop
ret
global _padlock_verify_context
align 16
_padlock_verify_context:
L$_padlock_verify_context_begin:
mov edx,DWORD [4+esp]
lea eax,[L$padlock_saved_context]
pushfd
call __padlock_verify_ctx
L$004verify_pic_point:
lea esp,[4+esp]
ret
align 16
__padlock_verify_ctx:
bt DWORD [4+esp],30
jnc NEAR L$005verified
cmp edx,DWORD [eax]
je NEAR L$005verified
pushfd
popfd
L$005verified:
mov DWORD [eax],edx
ret
global _padlock_reload_key
align 16
_padlock_reload_key:
L$_padlock_reload_key_begin:
pushfd
popfd
ret
global _padlock_aes_block
align 16
_padlock_aes_block:
L$_padlock_aes_block_begin:
push edi
push esi
push ebx
mov edi,DWORD [16+esp]
mov esi,DWORD [20+esp]
mov edx,DWORD [24+esp]
mov ecx,1
lea ebx,[32+edx]
lea edx,[16+edx]
db 243,15,167,200
pop ebx
pop esi
pop edi
ret
global _padlock_ecb_encrypt
align 16
_padlock_ecb_encrypt:
L$_padlock_ecb_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov esi,DWORD [24+esp]
mov edx,DWORD [28+esp]
mov ecx,DWORD [32+esp]
test edx,15
jnz NEAR L$006ecb_abort
test ecx,15
jnz NEAR L$006ecb_abort
lea eax,[L$padlock_saved_context]
pushfd
cld
call __padlock_verify_ctx
L$007ecb_pic_point:
lea edx,[16+edx]
xor eax,eax
xor ebx,ebx
test DWORD [edx],32
jnz NEAR L$008ecb_aligned
test edi,15
setz al
test esi,15
setz bl
test eax,ebx
jnz NEAR L$008ecb_aligned
neg eax
mov ebx,512
not eax
lea ebp,[esp-24]
cmp ecx,ebx
cmovc ebx,ecx
and eax,ebx
mov ebx,ecx
neg eax
and ebx,511
lea esp,[ebp*1+eax]
mov eax,512
cmovz ebx,eax
mov eax,ebp
and ebp,-16
and esp,-16
mov DWORD [16+ebp],eax
cmp ecx,ebx
ja NEAR L$009ecb_loop
mov eax,esi
cmp ebp,esp
cmove eax,edi
add eax,ecx
neg eax
and eax,4095
cmp eax,128
mov eax,-128
cmovae eax,ebx
and ebx,eax
jz NEAR L$010ecb_unaligned_tail
jmp NEAR L$009ecb_loop
align 16
L$009ecb_loop:
mov DWORD [ebp],edi
mov DWORD [4+ebp],esi
mov DWORD [8+ebp],ecx
mov ecx,ebx
mov DWORD [12+ebp],ebx
test edi,15
cmovnz edi,esp
test esi,15
jz NEAR L$011ecb_inp_aligned
shr ecx,2
db 243,165
sub edi,ebx
mov ecx,ebx
mov esi,edi
L$011ecb_inp_aligned:
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,200
mov edi,DWORD [ebp]
mov ebx,DWORD [12+ebp]
test edi,15
jz NEAR L$012ecb_out_aligned
mov ecx,ebx
lea esi,[esp]
shr ecx,2
db 243,165
sub edi,ebx
L$012ecb_out_aligned:
mov esi,DWORD [4+ebp]
mov ecx,DWORD [8+ebp]
add edi,ebx
add esi,ebx
sub ecx,ebx
mov ebx,512
jz NEAR L$013ecb_break
cmp ecx,ebx
jae NEAR L$009ecb_loop
L$010ecb_unaligned_tail:
xor eax,eax
cmp esp,ebp
cmove eax,ecx
sub esp,eax
mov eax,edi
mov ebx,ecx
shr ecx,2
lea edi,[esp]
db 243,165
mov esi,esp
mov edi,eax
mov ecx,ebx
jmp NEAR L$009ecb_loop
align 16
L$013ecb_break:
cmp esp,ebp
je NEAR L$014ecb_done
pxor xmm0,xmm0
lea eax,[esp]
L$015ecb_bzero:
movaps [eax],xmm0
lea eax,[16+eax]
cmp ebp,eax
ja NEAR L$015ecb_bzero
L$014ecb_done:
mov ebp,DWORD [16+ebp]
lea esp,[24+ebp]
jmp NEAR L$016ecb_exit
align 16
L$008ecb_aligned:
lea ebp,[ecx*1+esi]
neg ebp
and ebp,4095
xor eax,eax
cmp ebp,128
mov ebp,127
cmovae ebp,eax
and ebp,ecx
sub ecx,ebp
jz NEAR L$017ecb_aligned_tail
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,200
test ebp,ebp
jz NEAR L$016ecb_exit
L$017ecb_aligned_tail:
mov ecx,ebp
lea ebp,[esp-24]
mov esp,ebp
mov eax,ebp
sub esp,ecx
and ebp,-16
and esp,-16
mov DWORD [16+ebp],eax
mov eax,edi
mov ebx,ecx
shr ecx,2
lea edi,[esp]
db 243,165
mov esi,esp
mov edi,eax
mov ecx,ebx
jmp NEAR L$009ecb_loop
L$016ecb_exit:
mov eax,1
lea esp,[4+esp]
L$006ecb_abort:
pop edi
pop esi
pop ebx
pop ebp
ret
global _padlock_cbc_encrypt
align 16
_padlock_cbc_encrypt:
L$_padlock_cbc_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov esi,DWORD [24+esp]
mov edx,DWORD [28+esp]
mov ecx,DWORD [32+esp]
test edx,15
jnz NEAR L$018cbc_abort
test ecx,15
jnz NEAR L$018cbc_abort
lea eax,[L$padlock_saved_context]
pushfd
cld
call __padlock_verify_ctx
L$019cbc_pic_point:
lea edx,[16+edx]
xor eax,eax
xor ebx,ebx
test DWORD [edx],32
jnz NEAR L$020cbc_aligned
test edi,15
setz al
test esi,15
setz bl
test eax,ebx
jnz NEAR L$020cbc_aligned
neg eax
mov ebx,512
not eax
lea ebp,[esp-24]
cmp ecx,ebx
cmovc ebx,ecx
and eax,ebx
mov ebx,ecx
neg eax
and ebx,511
lea esp,[ebp*1+eax]
mov eax,512
cmovz ebx,eax
mov eax,ebp
and ebp,-16
and esp,-16
mov DWORD [16+ebp],eax
cmp ecx,ebx
ja NEAR L$021cbc_loop
mov eax,esi
cmp ebp,esp
cmove eax,edi
add eax,ecx
neg eax
and eax,4095
cmp eax,64
mov eax,-64
cmovae eax,ebx
and ebx,eax
jz NEAR L$022cbc_unaligned_tail
jmp NEAR L$021cbc_loop
align 16
L$021cbc_loop:
mov DWORD [ebp],edi
mov DWORD [4+ebp],esi
mov DWORD [8+ebp],ecx
mov ecx,ebx
mov DWORD [12+ebp],ebx
test edi,15
cmovnz edi,esp
test esi,15
jz NEAR L$023cbc_inp_aligned
shr ecx,2
db 243,165
sub edi,ebx
mov ecx,ebx
mov esi,edi
L$023cbc_inp_aligned:
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,208
movaps xmm0,[eax]
movaps [edx-16],xmm0
mov edi,DWORD [ebp]
mov ebx,DWORD [12+ebp]
test edi,15
jz NEAR L$024cbc_out_aligned
mov ecx,ebx
lea esi,[esp]
shr ecx,2
db 243,165
sub edi,ebx
L$024cbc_out_aligned:
mov esi,DWORD [4+ebp]
mov ecx,DWORD [8+ebp]
add edi,ebx
add esi,ebx
sub ecx,ebx
mov ebx,512
jz NEAR L$025cbc_break
cmp ecx,ebx
jae NEAR L$021cbc_loop
L$022cbc_unaligned_tail:
xor eax,eax
cmp esp,ebp
cmove eax,ecx
sub esp,eax
mov eax,edi
mov ebx,ecx
shr ecx,2
lea edi,[esp]
db 243,165
mov esi,esp
mov edi,eax
mov ecx,ebx
jmp NEAR L$021cbc_loop
align 16
L$025cbc_break:
cmp esp,ebp
je NEAR L$026cbc_done
pxor xmm0,xmm0
lea eax,[esp]
L$027cbc_bzero:
movaps [eax],xmm0
lea eax,[16+eax]
cmp ebp,eax
ja NEAR L$027cbc_bzero
L$026cbc_done:
mov ebp,DWORD [16+ebp]
lea esp,[24+ebp]
jmp NEAR L$028cbc_exit
align 16
L$020cbc_aligned:
lea ebp,[ecx*1+esi]
neg ebp
and ebp,4095
xor eax,eax
cmp ebp,64
mov ebp,63
cmovae ebp,eax
and ebp,ecx
sub ecx,ebp
jz NEAR L$029cbc_aligned_tail
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,208
movaps xmm0,[eax]
movaps [edx-16],xmm0
test ebp,ebp
jz NEAR L$028cbc_exit
L$029cbc_aligned_tail:
mov ecx,ebp
lea ebp,[esp-24]
mov esp,ebp
mov eax,ebp
sub esp,ecx
and ebp,-16
and esp,-16
mov DWORD [16+ebp],eax
mov eax,edi
mov ebx,ecx
shr ecx,2
lea edi,[esp]
db 243,165
mov esi,esp
mov edi,eax
mov ecx,ebx
jmp NEAR L$021cbc_loop
L$028cbc_exit:
mov eax,1
lea esp,[4+esp]
L$018cbc_abort:
pop edi
pop esi
pop ebx
pop ebp
ret
global _padlock_cfb_encrypt
align 16
_padlock_cfb_encrypt:
L$_padlock_cfb_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov esi,DWORD [24+esp]
mov edx,DWORD [28+esp]
mov ecx,DWORD [32+esp]
test edx,15
jnz NEAR L$030cfb_abort
test ecx,15
jnz NEAR L$030cfb_abort
lea eax,[L$padlock_saved_context]
pushfd
cld
call __padlock_verify_ctx
L$031cfb_pic_point:
lea edx,[16+edx]
xor eax,eax
xor ebx,ebx
test DWORD [edx],32
jnz NEAR L$032cfb_aligned
test edi,15
setz al
test esi,15
setz bl
test eax,ebx
jnz NEAR L$032cfb_aligned
neg eax
mov ebx,512
not eax
lea ebp,[esp-24]
cmp ecx,ebx
cmovc ebx,ecx
and eax,ebx
mov ebx,ecx
neg eax
and ebx,511
lea esp,[ebp*1+eax]
mov eax,512
cmovz ebx,eax
mov eax,ebp
and ebp,-16
and esp,-16
mov DWORD [16+ebp],eax
jmp NEAR L$033cfb_loop
align 16
L$033cfb_loop:
mov DWORD [ebp],edi
mov DWORD [4+ebp],esi
mov DWORD [8+ebp],ecx
mov ecx,ebx
mov DWORD [12+ebp],ebx
test edi,15
cmovnz edi,esp
test esi,15
jz NEAR L$034cfb_inp_aligned
shr ecx,2
db 243,165
sub edi,ebx
mov ecx,ebx
mov esi,edi
L$034cfb_inp_aligned:
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,224
movaps xmm0,[eax]
movaps [edx-16],xmm0
mov edi,DWORD [ebp]
mov ebx,DWORD [12+ebp]
test edi,15
jz NEAR L$035cfb_out_aligned
mov ecx,ebx
lea esi,[esp]
shr ecx,2
db 243,165
sub edi,ebx
L$035cfb_out_aligned:
mov esi,DWORD [4+ebp]
mov ecx,DWORD [8+ebp]
add edi,ebx
add esi,ebx
sub ecx,ebx
mov ebx,512
jnz NEAR L$033cfb_loop
cmp esp,ebp
je NEAR L$036cfb_done
pxor xmm0,xmm0
lea eax,[esp]
L$037cfb_bzero:
movaps [eax],xmm0
lea eax,[16+eax]
cmp ebp,eax
ja NEAR L$037cfb_bzero
L$036cfb_done:
mov ebp,DWORD [16+ebp]
lea esp,[24+ebp]
jmp NEAR L$038cfb_exit
align 16
L$032cfb_aligned:
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,224
movaps xmm0,[eax]
movaps [edx-16],xmm0
L$038cfb_exit:
mov eax,1
lea esp,[4+esp]
L$030cfb_abort:
pop edi
pop esi
pop ebx
pop ebp
ret
global _padlock_ofb_encrypt
align 16
_padlock_ofb_encrypt:
L$_padlock_ofb_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov esi,DWORD [24+esp]
mov edx,DWORD [28+esp]
mov ecx,DWORD [32+esp]
test edx,15
jnz NEAR L$039ofb_abort
test ecx,15
jnz NEAR L$039ofb_abort
lea eax,[L$padlock_saved_context]
pushfd
cld
call __padlock_verify_ctx
L$040ofb_pic_point:
lea edx,[16+edx]
xor eax,eax
xor ebx,ebx
test DWORD [edx],32
jnz NEAR L$041ofb_aligned
test edi,15
setz al
test esi,15
setz bl
test eax,ebx
jnz NEAR L$041ofb_aligned
neg eax
mov ebx,512
not eax
lea ebp,[esp-24]
cmp ecx,ebx
cmovc ebx,ecx
and eax,ebx
mov ebx,ecx
neg eax
and ebx,511
lea esp,[ebp*1+eax]
mov eax,512
cmovz ebx,eax
mov eax,ebp
and ebp,-16
and esp,-16
mov DWORD [16+ebp],eax
jmp NEAR L$042ofb_loop
align 16
L$042ofb_loop:
mov DWORD [ebp],edi
mov DWORD [4+ebp],esi
mov DWORD [8+ebp],ecx
mov ecx,ebx
mov DWORD [12+ebp],ebx
test edi,15
cmovnz edi,esp
test esi,15
jz NEAR L$043ofb_inp_aligned
shr ecx,2
db 243,165
sub edi,ebx
mov ecx,ebx
mov esi,edi
L$043ofb_inp_aligned:
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,232
movaps xmm0,[eax]
movaps [edx-16],xmm0
mov edi,DWORD [ebp]
mov ebx,DWORD [12+ebp]
test edi,15
jz NEAR L$044ofb_out_aligned
mov ecx,ebx
lea esi,[esp]
shr ecx,2
db 243,165
sub edi,ebx
L$044ofb_out_aligned:
mov esi,DWORD [4+ebp]
mov ecx,DWORD [8+ebp]
add edi,ebx
add esi,ebx
sub ecx,ebx
mov ebx,512
jnz NEAR L$042ofb_loop
cmp esp,ebp
je NEAR L$045ofb_done
pxor xmm0,xmm0
lea eax,[esp]
L$046ofb_bzero:
movaps [eax],xmm0
lea eax,[16+eax]
cmp ebp,eax
ja NEAR L$046ofb_bzero
L$045ofb_done:
mov ebp,DWORD [16+ebp]
lea esp,[24+ebp]
jmp NEAR L$047ofb_exit
align 16
L$041ofb_aligned:
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,232
movaps xmm0,[eax]
movaps [edx-16],xmm0
L$047ofb_exit:
mov eax,1
lea esp,[4+esp]
L$039ofb_abort:
pop edi
pop esi
pop ebx
pop ebp
ret
global _padlock_ctr32_encrypt
align 16
_padlock_ctr32_encrypt:
L$_padlock_ctr32_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov esi,DWORD [24+esp]
mov edx,DWORD [28+esp]
mov ecx,DWORD [32+esp]
test edx,15
jnz NEAR L$048ctr32_abort
test ecx,15
jnz NEAR L$048ctr32_abort
lea eax,[L$padlock_saved_context]
pushfd
cld
call __padlock_verify_ctx
L$049ctr32_pic_point:
lea edx,[16+edx]
xor eax,eax
movq mm0,[edx-16]
mov ebx,512
not eax
lea ebp,[esp-24]
cmp ecx,ebx
cmovc ebx,ecx
and eax,ebx
mov ebx,ecx
neg eax
and ebx,511
lea esp,[ebp*1+eax]
mov eax,512
cmovz ebx,eax
mov eax,ebp
and ebp,-16
and esp,-16
mov DWORD [16+ebp],eax
jmp NEAR L$050ctr32_loop
align 16
L$050ctr32_loop:
mov DWORD [ebp],edi
mov DWORD [4+ebp],esi
mov DWORD [8+ebp],ecx
mov ecx,ebx
mov DWORD [12+ebp],ebx
mov ecx,DWORD [edx-4]
xor edi,edi
mov eax,DWORD [edx-8]
L$051ctr32_prepare:
mov DWORD [12+edi*1+esp],ecx
bswap ecx
movq [edi*1+esp],mm0
inc ecx
mov DWORD [8+edi*1+esp],eax
bswap ecx
lea edi,[16+edi]
cmp edi,ebx
jb NEAR L$051ctr32_prepare
mov DWORD [edx-4],ecx
lea esi,[esp]
lea edi,[esp]
mov ecx,ebx
lea eax,[edx-16]
lea ebx,[16+edx]
shr ecx,4
db 243,15,167,200
mov edi,DWORD [ebp]
mov ebx,DWORD [12+ebp]
mov esi,DWORD [4+ebp]
xor ecx,ecx
L$052ctr32_xor:
movups xmm1,[ecx*1+esi]
lea ecx,[16+ecx]
pxor xmm1,[ecx*1+esp-16]
movups [ecx*1+edi-16],xmm1
cmp ecx,ebx
jb NEAR L$052ctr32_xor
mov ecx,DWORD [8+ebp]
add edi,ebx
add esi,ebx
sub ecx,ebx
mov ebx,512
jnz NEAR L$050ctr32_loop
pxor xmm0,xmm0
lea eax,[esp]
L$053ctr32_bzero:
movaps [eax],xmm0
lea eax,[16+eax]
cmp ebp,eax
ja NEAR L$053ctr32_bzero
L$054ctr32_done:
mov ebp,DWORD [16+ebp]
lea esp,[24+ebp]
mov eax,1
lea esp,[4+esp]
emms
L$048ctr32_abort:
pop edi
pop esi
pop ebx
pop ebp
ret
global _padlock_xstore
align 16
_padlock_xstore:
L$_padlock_xstore_begin:
push edi
mov edi,DWORD [8+esp]
mov edx,DWORD [12+esp]
db 15,167,192
pop edi
ret
align 16
__win32_segv_handler:
mov eax,1
mov edx,DWORD [4+esp]
mov ecx,DWORD [12+esp]
cmp DWORD [edx],3221225477
jne NEAR L$055ret
add DWORD [184+ecx],4
mov eax,0
L$055ret:
ret
%if __NASM_VERSION_ID__ >= 0x02030000
safeseh __win32_segv_handler
%endif
global _padlock_sha1_oneshot
align 16
_padlock_sha1_oneshot:
L$_padlock_sha1_oneshot_begin:
push edi
push esi
xor eax,eax
mov edi,DWORD [12+esp]
mov esi,DWORD [16+esp]
mov ecx,DWORD [20+esp]
push __win32_segv_handler
db 100,255,48
db 100,137,32
mov edx,esp
add esp,-128
movups xmm0,[edi]
and esp,-16
mov eax,DWORD [16+edi]
movaps [esp],xmm0
mov edi,esp
mov DWORD [16+esp],eax
xor eax,eax
db 243,15,166,200
movaps xmm0,[esp]
mov eax,DWORD [16+esp]
mov esp,edx
db 100,143,5,0,0,0,0
lea esp,[4+esp]
mov edi,DWORD [16+esp]
movups [edi],xmm0
mov DWORD [16+edi],eax
pop esi
pop edi
ret
global _padlock_sha1_blocks
align 16
_padlock_sha1_blocks:
L$_padlock_sha1_blocks_begin:
push edi
push esi
mov edi,DWORD [12+esp]
mov esi,DWORD [16+esp]
mov edx,esp
mov ecx,DWORD [20+esp]
add esp,-128
movups xmm0,[edi]
and esp,-16
mov eax,DWORD [16+edi]
movaps [esp],xmm0
mov edi,esp
mov DWORD [16+esp],eax
mov eax,-1
db 243,15,166,200
movaps xmm0,[esp]
mov eax,DWORD [16+esp]
mov esp,edx
mov edi,DWORD [12+esp]
movups [edi],xmm0
mov DWORD [16+edi],eax
pop esi
pop edi
ret
global _padlock_sha256_oneshot
align 16
_padlock_sha256_oneshot:
L$_padlock_sha256_oneshot_begin:
push edi
push esi
xor eax,eax
mov edi,DWORD [12+esp]
mov esi,DWORD [16+esp]
mov ecx,DWORD [20+esp]
push __win32_segv_handler
db 100,255,48
db 100,137,32
mov edx,esp
add esp,-128
movups xmm0,[edi]
and esp,-16
movups xmm1,[16+edi]
movaps [esp],xmm0
mov edi,esp
movaps [16+esp],xmm1
xor eax,eax
db 243,15,166,208
movaps xmm0,[esp]
movaps xmm1,[16+esp]
mov esp,edx
db 100,143,5,0,0,0,0
lea esp,[4+esp]
mov edi,DWORD [16+esp]
movups [edi],xmm0
movups [16+edi],xmm1
pop esi
pop edi
ret
global _padlock_sha256_blocks
align 16
_padlock_sha256_blocks:
L$_padlock_sha256_blocks_begin:
push edi
push esi
mov edi,DWORD [12+esp]
mov esi,DWORD [16+esp]
mov ecx,DWORD [20+esp]
mov edx,esp
add esp,-128
movups xmm0,[edi]
and esp,-16
movups xmm1,[16+edi]
movaps [esp],xmm0
mov edi,esp
movaps [16+esp],xmm1
mov eax,-1
db 243,15,166,208
movaps xmm0,[esp]
movaps xmm1,[16+esp]
mov esp,edx
mov edi,DWORD [12+esp]
movups [edi],xmm0
movups [16+edi],xmm1
pop esi
pop edi
ret
global _padlock_sha512_blocks
align 16
_padlock_sha512_blocks:
L$_padlock_sha512_blocks_begin:
push edi
push esi
mov edi,DWORD [12+esp]
mov esi,DWORD [16+esp]
mov ecx,DWORD [20+esp]
mov edx,esp
add esp,-128
movups xmm0,[edi]
and esp,-16
movups xmm1,[16+edi]
movups xmm2,[32+edi]
movups xmm3,[48+edi]
movaps [esp],xmm0
mov edi,esp
movaps [16+esp],xmm1
movaps [32+esp],xmm2
movaps [48+esp],xmm3
db 243,15,166,224
movaps xmm0,[esp]
movaps xmm1,[16+esp]
movaps xmm2,[32+esp]
movaps xmm3,[48+esp]
mov esp,edx
mov edi,DWORD [12+esp]
movups [edi],xmm0
movups [16+edi],xmm1
movups [32+edi],xmm2
movups [48+edi],xmm3
pop esi
pop edi
ret
db 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
db 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
db 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
db 110,115,115,108,46,111,114,103,62,0
align 16
section .data align=4
align 4
L$padlock_saved_context:
dd 0