Files
blst/build/win64/sha256-x86_64.asm

1638 lines
28 KiB
NASM

OPTION DOTNAME
_DATA SEGMENT
COMM __blst_platform_cap:DWORD:1
_DATA ENDS
.rdata SEGMENT READONLY ALIGN(256)
ALIGN 64
K256::
DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
DD 003020100h,00b0a0908h,0ffffffffh,0ffffffffh
DD 0ffffffffh,0ffffffffh,003020100h,00b0a0908h
DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
DB 32,64,100,111,116,45,97,115,109,0
.rdata ENDS
.text$ SEGMENT ALIGN(256) 'CODE'
PUBLIC blst_sha256_block_data_order_shaext
ALIGN 64
blst_sha256_block_data_order_shaext PROC PUBLIC
DB 243,15,30,250
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov r11,rsp
$L$SEH_begin_blst_sha256_block_data_order_shaext::
push rbp
mov rbp,rsp
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
$L$blst_sha256_block_data_order$2::
sub rsp,050h
movaps XMMWORD PTR[(-80)+rbp],xmm6
movaps XMMWORD PTR[(-64)+rbp],xmm7
movaps XMMWORD PTR[(-48)+rbp],xmm8
movaps XMMWORD PTR[(-32)+rbp],xmm9
movaps XMMWORD PTR[(-16)+rbp],xmm10
$L$SEH_body_blst_sha256_block_data_order_shaext::
ifdef __SGX_LVI_HARDENING__
lfence
endif
lea rcx,QWORD PTR[((K256+128))]
movdqu xmm1,XMMWORD PTR[rdi]
movdqu xmm2,XMMWORD PTR[16+rdi]
movdqa xmm7,XMMWORD PTR[((256-128))+rcx]
pshufd xmm0,xmm1,01bh
pshufd xmm1,xmm1,0b1h
pshufd xmm2,xmm2,01bh
movdqa xmm8,xmm7
DB 102,15,58,15,202,8
punpcklqdq xmm2,xmm0
jmp $L$oop_shaext
ALIGN 16
$L$oop_shaext::
movdqu xmm3,XMMWORD PTR[rsi]
movdqu xmm4,XMMWORD PTR[16+rsi]
movdqu xmm5,XMMWORD PTR[32+rsi]
DB 102,15,56,0,223
movdqu xmm6,XMMWORD PTR[48+rsi]
movdqa xmm0,XMMWORD PTR[((0-128))+rcx]
paddd xmm0,xmm3
DB 102,15,56,0,231
movdqa xmm10,xmm2
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
nop
movdqa xmm9,xmm1
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((16-128))+rcx]
paddd xmm0,xmm4
DB 102,15,56,0,239
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
lea rsi,QWORD PTR[64+rsi]
DB 15,56,204,220
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((32-128))+rcx]
paddd xmm0,xmm5
DB 102,15,56,0,247
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm6
DB 102,15,58,15,253,4
nop
paddd xmm3,xmm7
DB 15,56,204,229
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((48-128))+rcx]
paddd xmm0,xmm6
DB 15,56,205,222
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm3
DB 102,15,58,15,254,4
nop
paddd xmm4,xmm7
DB 15,56,204,238
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((64-128))+rcx]
paddd xmm0,xmm3
DB 15,56,205,227
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm4
DB 102,15,58,15,251,4
nop
paddd xmm5,xmm7
DB 15,56,204,243
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((80-128))+rcx]
paddd xmm0,xmm4
DB 15,56,205,236
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm5
DB 102,15,58,15,252,4
nop
paddd xmm6,xmm7
DB 15,56,204,220
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((96-128))+rcx]
paddd xmm0,xmm5
DB 15,56,205,245
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm6
DB 102,15,58,15,253,4
nop
paddd xmm3,xmm7
DB 15,56,204,229
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((112-128))+rcx]
paddd xmm0,xmm6
DB 15,56,205,222
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm3
DB 102,15,58,15,254,4
nop
paddd xmm4,xmm7
DB 15,56,204,238
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((128-128))+rcx]
paddd xmm0,xmm3
DB 15,56,205,227
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm4
DB 102,15,58,15,251,4
nop
paddd xmm5,xmm7
DB 15,56,204,243
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((144-128))+rcx]
paddd xmm0,xmm4
DB 15,56,205,236
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm5
DB 102,15,58,15,252,4
nop
paddd xmm6,xmm7
DB 15,56,204,220
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((160-128))+rcx]
paddd xmm0,xmm5
DB 15,56,205,245
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm6
DB 102,15,58,15,253,4
nop
paddd xmm3,xmm7
DB 15,56,204,229
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((176-128))+rcx]
paddd xmm0,xmm6
DB 15,56,205,222
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm3
DB 102,15,58,15,254,4
nop
paddd xmm4,xmm7
DB 15,56,204,238
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((192-128))+rcx]
paddd xmm0,xmm3
DB 15,56,205,227
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm4
DB 102,15,58,15,251,4
nop
paddd xmm5,xmm7
DB 15,56,204,243
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((208-128))+rcx]
paddd xmm0,xmm4
DB 15,56,205,236
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
movdqa xmm7,xmm5
DB 102,15,58,15,252,4
DB 15,56,203,202
paddd xmm6,xmm7
movdqa xmm0,XMMWORD PTR[((224-128))+rcx]
paddd xmm0,xmm5
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
DB 15,56,205,245
movdqa xmm7,xmm8
DB 15,56,203,202
movdqa xmm0,XMMWORD PTR[((240-128))+rcx]
paddd xmm0,xmm6
nop
DB 15,56,203,209
pshufd xmm0,xmm0,00eh
dec rdx
nop
DB 15,56,203,202
paddd xmm2,xmm10
paddd xmm1,xmm9
jnz $L$oop_shaext
pshufd xmm2,xmm2,0b1h
pshufd xmm7,xmm1,01bh
pshufd xmm1,xmm1,0b1h
punpckhqdq xmm1,xmm2
DB 102,15,58,15,215,8
movdqu XMMWORD PTR[rdi],xmm1
movdqu XMMWORD PTR[16+rdi],xmm2
movaps xmm6,XMMWORD PTR[((-80))+rbp]
movaps xmm7,XMMWORD PTR[((-64))+rbp]
movaps xmm8,XMMWORD PTR[((-48))+rbp]
movaps xmm9,XMMWORD PTR[((-32))+rbp]
movaps xmm10,XMMWORD PTR[((-16))+rbp]
mov rsp,rbp
pop rbp
$L$SEH_epilogue_blst_sha256_block_data_order_shaext::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
$L$SEH_end_blst_sha256_block_data_order_shaext::
blst_sha256_block_data_order_shaext ENDP
PUBLIC blst_sha256_block_data_order
ALIGN 64
blst_sha256_block_data_order PROC PUBLIC
DB 243,15,30,250
mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
mov QWORD PTR[16+rsp],rsi
mov r11,rsp
$L$SEH_begin_blst_sha256_block_data_order::
push rbp
mov rbp,rsp
mov rdi,rcx
mov rsi,rdx
mov rdx,r8
ifndef __SGX_LVI_HARDENING__
test DWORD PTR[__blst_platform_cap],2
jnz $L$blst_sha256_block_data_order$2
endif
push rbx
push r12
push r13
push r14
push r15
shl rdx,4
sub rsp,88
lea rdx,QWORD PTR[rdx*4+rsi]
mov QWORD PTR[((-64))+rbp],rdi
mov QWORD PTR[((-48))+rbp],rdx
movaps XMMWORD PTR[(-128)+rbp],xmm6
movaps XMMWORD PTR[(-112)+rbp],xmm7
movaps XMMWORD PTR[(-96)+rbp],xmm8
movaps XMMWORD PTR[(-80)+rbp],xmm9
$L$SEH_body_blst_sha256_block_data_order::
lea rsp,QWORD PTR[((-64))+rsp]
ifdef __SGX_LVI_HARDENING__
lfence
endif
mov eax,DWORD PTR[rdi]
and rsp,-64
mov ebx,DWORD PTR[4+rdi]
mov ecx,DWORD PTR[8+rdi]
mov edx,DWORD PTR[12+rdi]
mov r8d,DWORD PTR[16+rdi]
mov r9d,DWORD PTR[20+rdi]
mov r10d,DWORD PTR[24+rdi]
mov r11d,DWORD PTR[28+rdi]
jmp $L$loop_ssse3
ALIGN 16
$L$loop_ssse3::
movdqa xmm7,XMMWORD PTR[((K256+256))]
mov QWORD PTR[((-56))+rbp],rsi
movdqu xmm0,XMMWORD PTR[rsi]
movdqu xmm1,XMMWORD PTR[16+rsi]
movdqu xmm2,XMMWORD PTR[32+rsi]
DB 102,15,56,0,199
movdqu xmm3,XMMWORD PTR[48+rsi]
lea rsi,QWORD PTR[K256]
DB 102,15,56,0,207
movdqa xmm4,XMMWORD PTR[rsi]
movdqa xmm5,XMMWORD PTR[16+rsi]
DB 102,15,56,0,215
paddd xmm4,xmm0
movdqa xmm6,XMMWORD PTR[32+rsi]
DB 102,15,56,0,223
movdqa xmm7,XMMWORD PTR[48+rsi]
paddd xmm5,xmm1
paddd xmm6,xmm2
paddd xmm7,xmm3
movdqa XMMWORD PTR[rsp],xmm4
mov r14d,eax
movdqa XMMWORD PTR[16+rsp],xmm5
mov edi,ebx
movdqa XMMWORD PTR[32+rsp],xmm6
xor edi,ecx
movdqa XMMWORD PTR[48+rsp],xmm7
mov r13d,r8d
jmp $L$ssse3_00_47
ALIGN 16
$L$ssse3_00_47::
sub rsi,-64
ror r13d,14
movdqa xmm4,xmm1
mov eax,r14d
mov r12d,r9d
movdqa xmm7,xmm3
ror r14d,9
xor r13d,r8d
xor r12d,r10d
ror r13d,5
xor r14d,eax
DB 102,15,58,15,224,4
and r12d,r8d
xor r13d,r8d
DB 102,15,58,15,250,4
add r11d,DWORD PTR[rsp]
mov r15d,eax
xor r12d,r10d
ror r14d,11
movdqa xmm5,xmm4
xor r15d,ebx
add r11d,r12d
movdqa xmm6,xmm4
ror r13d,6
and edi,r15d
psrld xmm4,3
xor r14d,eax
add r11d,r13d
xor edi,ebx
paddd xmm0,xmm7
ror r14d,2
add edx,r11d
psrld xmm6,7
add r11d,edi
mov r13d,edx
pshufd xmm7,xmm3,250
add r14d,r11d
ror r13d,14
pslld xmm5,14
mov r11d,r14d
mov r12d,r8d
pxor xmm4,xmm6
ror r14d,9
xor r13d,edx
xor r12d,r9d
ror r13d,5
psrld xmm6,11
xor r14d,r11d
pxor xmm4,xmm5
and r12d,edx
xor r13d,edx
pslld xmm5,11
add r10d,DWORD PTR[4+rsp]
mov edi,r11d
pxor xmm4,xmm6
xor r12d,r9d
ror r14d,11
movdqa xmm6,xmm7
xor edi,eax
add r10d,r12d
pxor xmm4,xmm5
ror r13d,6
and r15d,edi
xor r14d,r11d
psrld xmm7,10
add r10d,r13d
xor r15d,eax
paddd xmm0,xmm4
ror r14d,2
add ecx,r10d
psrlq xmm6,17
add r10d,r15d
mov r13d,ecx
add r14d,r10d
pxor xmm7,xmm6
ror r13d,14
mov r10d,r14d
mov r12d,edx
ror r14d,9
psrlq xmm6,2
xor r13d,ecx
xor r12d,r8d
pxor xmm7,xmm6
ror r13d,5
xor r14d,r10d
and r12d,ecx
pshufd xmm7,xmm7,128
xor r13d,ecx
add r9d,DWORD PTR[8+rsp]
mov r15d,r10d
psrldq xmm7,8
xor r12d,r8d
ror r14d,11
xor r15d,r11d
add r9d,r12d
ror r13d,6
paddd xmm0,xmm7
and edi,r15d
xor r14d,r10d
add r9d,r13d
pshufd xmm7,xmm0,80
xor edi,r11d
ror r14d,2
add ebx,r9d
movdqa xmm6,xmm7
add r9d,edi
mov r13d,ebx
psrld xmm7,10
add r14d,r9d
ror r13d,14
psrlq xmm6,17
mov r9d,r14d
mov r12d,ecx
pxor xmm7,xmm6
ror r14d,9
xor r13d,ebx
xor r12d,edx
ror r13d,5
xor r14d,r9d
psrlq xmm6,2
and r12d,ebx
xor r13d,ebx
add r8d,DWORD PTR[12+rsp]
pxor xmm7,xmm6
mov edi,r9d
xor r12d,edx
ror r14d,11
pshufd xmm7,xmm7,8
xor edi,r10d
add r8d,r12d
movdqa xmm6,XMMWORD PTR[rsi]
ror r13d,6
and r15d,edi
pslldq xmm7,8
xor r14d,r9d
add r8d,r13d
xor r15d,r10d
paddd xmm0,xmm7
ror r14d,2
add eax,r8d
add r8d,r15d
paddd xmm6,xmm0
mov r13d,eax
add r14d,r8d
movdqa XMMWORD PTR[rsp],xmm6
ror r13d,14
movdqa xmm4,xmm2
mov r8d,r14d
mov r12d,ebx
movdqa xmm7,xmm0
ror r14d,9
xor r13d,eax
xor r12d,ecx
ror r13d,5
xor r14d,r8d
DB 102,15,58,15,225,4
and r12d,eax
xor r13d,eax
DB 102,15,58,15,251,4
add edx,DWORD PTR[16+rsp]
mov r15d,r8d
xor r12d,ecx
ror r14d,11
movdqa xmm5,xmm4
xor r15d,r9d
add edx,r12d
movdqa xmm6,xmm4
ror r13d,6
and edi,r15d
psrld xmm4,3
xor r14d,r8d
add edx,r13d
xor edi,r9d
paddd xmm1,xmm7
ror r14d,2
add r11d,edx
psrld xmm6,7
add edx,edi
mov r13d,r11d
pshufd xmm7,xmm0,250
add r14d,edx
ror r13d,14
pslld xmm5,14
mov edx,r14d
mov r12d,eax
pxor xmm4,xmm6
ror r14d,9
xor r13d,r11d
xor r12d,ebx
ror r13d,5
psrld xmm6,11
xor r14d,edx
pxor xmm4,xmm5
and r12d,r11d
xor r13d,r11d
pslld xmm5,11
add ecx,DWORD PTR[20+rsp]
mov edi,edx
pxor xmm4,xmm6
xor r12d,ebx
ror r14d,11
movdqa xmm6,xmm7
xor edi,r8d
add ecx,r12d
pxor xmm4,xmm5
ror r13d,6
and r15d,edi
xor r14d,edx
psrld xmm7,10
add ecx,r13d
xor r15d,r8d
paddd xmm1,xmm4
ror r14d,2
add r10d,ecx
psrlq xmm6,17
add ecx,r15d
mov r13d,r10d
add r14d,ecx
pxor xmm7,xmm6
ror r13d,14
mov ecx,r14d
mov r12d,r11d
ror r14d,9
psrlq xmm6,2
xor r13d,r10d
xor r12d,eax
pxor xmm7,xmm6
ror r13d,5
xor r14d,ecx
and r12d,r10d
pshufd xmm7,xmm7,128
xor r13d,r10d
add ebx,DWORD PTR[24+rsp]
mov r15d,ecx
psrldq xmm7,8
xor r12d,eax
ror r14d,11
xor r15d,edx
add ebx,r12d
ror r13d,6
paddd xmm1,xmm7
and edi,r15d
xor r14d,ecx
add ebx,r13d
pshufd xmm7,xmm1,80
xor edi,edx
ror r14d,2
add r9d,ebx
movdqa xmm6,xmm7
add ebx,edi
mov r13d,r9d
psrld xmm7,10
add r14d,ebx
ror r13d,14
psrlq xmm6,17
mov ebx,r14d
mov r12d,r10d
pxor xmm7,xmm6
ror r14d,9
xor r13d,r9d
xor r12d,r11d
ror r13d,5
xor r14d,ebx
psrlq xmm6,2
and r12d,r9d
xor r13d,r9d
add eax,DWORD PTR[28+rsp]
pxor xmm7,xmm6
mov edi,ebx
xor r12d,r11d
ror r14d,11
pshufd xmm7,xmm7,8
xor edi,ecx
add eax,r12d
movdqa xmm6,XMMWORD PTR[16+rsi]
ror r13d,6
and r15d,edi
pslldq xmm7,8
xor r14d,ebx
add eax,r13d
xor r15d,ecx
paddd xmm1,xmm7
ror r14d,2
add r8d,eax
add eax,r15d
paddd xmm6,xmm1
mov r13d,r8d
add r14d,eax
movdqa XMMWORD PTR[16+rsp],xmm6
ror r13d,14
movdqa xmm4,xmm3
mov eax,r14d
mov r12d,r9d
movdqa xmm7,xmm1
ror r14d,9
xor r13d,r8d
xor r12d,r10d
ror r13d,5
xor r14d,eax
DB 102,15,58,15,226,4
and r12d,r8d
xor r13d,r8d
DB 102,15,58,15,248,4
add r11d,DWORD PTR[32+rsp]
mov r15d,eax
xor r12d,r10d
ror r14d,11
movdqa xmm5,xmm4
xor r15d,ebx
add r11d,r12d
movdqa xmm6,xmm4
ror r13d,6
and edi,r15d
psrld xmm4,3
xor r14d,eax
add r11d,r13d
xor edi,ebx
paddd xmm2,xmm7
ror r14d,2
add edx,r11d
psrld xmm6,7
add r11d,edi
mov r13d,edx
pshufd xmm7,xmm1,250
add r14d,r11d
ror r13d,14
pslld xmm5,14
mov r11d,r14d
mov r12d,r8d
pxor xmm4,xmm6
ror r14d,9
xor r13d,edx
xor r12d,r9d
ror r13d,5
psrld xmm6,11
xor r14d,r11d
pxor xmm4,xmm5
and r12d,edx
xor r13d,edx
pslld xmm5,11
add r10d,DWORD PTR[36+rsp]
mov edi,r11d
pxor xmm4,xmm6
xor r12d,r9d
ror r14d,11
movdqa xmm6,xmm7
xor edi,eax
add r10d,r12d
pxor xmm4,xmm5
ror r13d,6
and r15d,edi
xor r14d,r11d
psrld xmm7,10
add r10d,r13d
xor r15d,eax
paddd xmm2,xmm4
ror r14d,2
add ecx,r10d
psrlq xmm6,17
add r10d,r15d
mov r13d,ecx
add r14d,r10d
pxor xmm7,xmm6
ror r13d,14
mov r10d,r14d
mov r12d,edx
ror r14d,9
psrlq xmm6,2
xor r13d,ecx
xor r12d,r8d
pxor xmm7,xmm6
ror r13d,5
xor r14d,r10d
and r12d,ecx
pshufd xmm7,xmm7,128
xor r13d,ecx
add r9d,DWORD PTR[40+rsp]
mov r15d,r10d
psrldq xmm7,8
xor r12d,r8d
ror r14d,11
xor r15d,r11d
add r9d,r12d
ror r13d,6
paddd xmm2,xmm7
and edi,r15d
xor r14d,r10d
add r9d,r13d
pshufd xmm7,xmm2,80
xor edi,r11d
ror r14d,2
add ebx,r9d
movdqa xmm6,xmm7
add r9d,edi
mov r13d,ebx
psrld xmm7,10
add r14d,r9d
ror r13d,14
psrlq xmm6,17
mov r9d,r14d
mov r12d,ecx
pxor xmm7,xmm6
ror r14d,9
xor r13d,ebx
xor r12d,edx
ror r13d,5
xor r14d,r9d
psrlq xmm6,2
and r12d,ebx
xor r13d,ebx
add r8d,DWORD PTR[44+rsp]
pxor xmm7,xmm6
mov edi,r9d
xor r12d,edx
ror r14d,11
pshufd xmm7,xmm7,8
xor edi,r10d
add r8d,r12d
movdqa xmm6,XMMWORD PTR[32+rsi]
ror r13d,6
and r15d,edi
pslldq xmm7,8
xor r14d,r9d
add r8d,r13d
xor r15d,r10d
paddd xmm2,xmm7
ror r14d,2
add eax,r8d
add r8d,r15d
paddd xmm6,xmm2
mov r13d,eax
add r14d,r8d
movdqa XMMWORD PTR[32+rsp],xmm6
ror r13d,14
movdqa xmm4,xmm0
mov r8d,r14d
mov r12d,ebx
movdqa xmm7,xmm2
ror r14d,9
xor r13d,eax
xor r12d,ecx
ror r13d,5
xor r14d,r8d
DB 102,15,58,15,227,4
and r12d,eax
xor r13d,eax
DB 102,15,58,15,249,4
add edx,DWORD PTR[48+rsp]
mov r15d,r8d
xor r12d,ecx
ror r14d,11
movdqa xmm5,xmm4
xor r15d,r9d
add edx,r12d
movdqa xmm6,xmm4
ror r13d,6
and edi,r15d
psrld xmm4,3
xor r14d,r8d
add edx,r13d
xor edi,r9d
paddd xmm3,xmm7
ror r14d,2
add r11d,edx
psrld xmm6,7
add edx,edi
mov r13d,r11d
pshufd xmm7,xmm2,250
add r14d,edx
ror r13d,14
pslld xmm5,14
mov edx,r14d
mov r12d,eax
pxor xmm4,xmm6
ror r14d,9
xor r13d,r11d
xor r12d,ebx
ror r13d,5
psrld xmm6,11
xor r14d,edx
pxor xmm4,xmm5
and r12d,r11d
xor r13d,r11d
pslld xmm5,11
add ecx,DWORD PTR[52+rsp]
mov edi,edx
pxor xmm4,xmm6
xor r12d,ebx
ror r14d,11
movdqa xmm6,xmm7
xor edi,r8d
add ecx,r12d
pxor xmm4,xmm5
ror r13d,6
and r15d,edi
xor r14d,edx
psrld xmm7,10
add ecx,r13d
xor r15d,r8d
paddd xmm3,xmm4
ror r14d,2
add r10d,ecx
psrlq xmm6,17
add ecx,r15d
mov r13d,r10d
add r14d,ecx
pxor xmm7,xmm6
ror r13d,14
mov ecx,r14d
mov r12d,r11d
ror r14d,9
psrlq xmm6,2
xor r13d,r10d
xor r12d,eax
pxor xmm7,xmm6
ror r13d,5
xor r14d,ecx
and r12d,r10d
pshufd xmm7,xmm7,128
xor r13d,r10d
add ebx,DWORD PTR[56+rsp]
mov r15d,ecx
psrldq xmm7,8
xor r12d,eax
ror r14d,11
xor r15d,edx
add ebx,r12d
ror r13d,6
paddd xmm3,xmm7
and edi,r15d
xor r14d,ecx
add ebx,r13d
pshufd xmm7,xmm3,80
xor edi,edx
ror r14d,2
add r9d,ebx
movdqa xmm6,xmm7
add ebx,edi
mov r13d,r9d
psrld xmm7,10
add r14d,ebx
ror r13d,14
psrlq xmm6,17
mov ebx,r14d
mov r12d,r10d
pxor xmm7,xmm6
ror r14d,9
xor r13d,r9d
xor r12d,r11d
ror r13d,5
xor r14d,ebx
psrlq xmm6,2
and r12d,r9d
xor r13d,r9d
add eax,DWORD PTR[60+rsp]
pxor xmm7,xmm6
mov edi,ebx
xor r12d,r11d
ror r14d,11
pshufd xmm7,xmm7,8
xor edi,ecx
add eax,r12d
movdqa xmm6,XMMWORD PTR[48+rsi]
ror r13d,6
and r15d,edi
pslldq xmm7,8
xor r14d,ebx
add eax,r13d
xor r15d,ecx
paddd xmm3,xmm7
ror r14d,2
add r8d,eax
add eax,r15d
paddd xmm6,xmm3
mov r13d,r8d
add r14d,eax
movdqa XMMWORD PTR[48+rsp],xmm6
cmp BYTE PTR[67+rsi],0
jne $L$ssse3_00_47
ror r13d,14
mov eax,r14d
mov r12d,r9d
ror r14d,9
xor r13d,r8d
xor r12d,r10d
ror r13d,5
xor r14d,eax
and r12d,r8d
xor r13d,r8d
add r11d,DWORD PTR[rsp]
mov r15d,eax
xor r12d,r10d
ror r14d,11
xor r15d,ebx
add r11d,r12d
ror r13d,6
and edi,r15d
xor r14d,eax
add r11d,r13d
xor edi,ebx
ror r14d,2
add edx,r11d
add r11d,edi
mov r13d,edx
add r14d,r11d
ror r13d,14
mov r11d,r14d
mov r12d,r8d
ror r14d,9
xor r13d,edx
xor r12d,r9d
ror r13d,5
xor r14d,r11d
and r12d,edx
xor r13d,edx
add r10d,DWORD PTR[4+rsp]
mov edi,r11d
xor r12d,r9d
ror r14d,11
xor edi,eax
add r10d,r12d
ror r13d,6
and r15d,edi
xor r14d,r11d
add r10d,r13d
xor r15d,eax
ror r14d,2
add ecx,r10d
add r10d,r15d
mov r13d,ecx
add r14d,r10d
ror r13d,14
mov r10d,r14d
mov r12d,edx
ror r14d,9
xor r13d,ecx
xor r12d,r8d
ror r13d,5
xor r14d,r10d
and r12d,ecx
xor r13d,ecx
add r9d,DWORD PTR[8+rsp]
mov r15d,r10d
xor r12d,r8d
ror r14d,11
xor r15d,r11d
add r9d,r12d
ror r13d,6
and edi,r15d
xor r14d,r10d
add r9d,r13d
xor edi,r11d
ror r14d,2
add ebx,r9d
add r9d,edi
mov r13d,ebx
add r14d,r9d
ror r13d,14
mov r9d,r14d
mov r12d,ecx
ror r14d,9
xor r13d,ebx
xor r12d,edx
ror r13d,5
xor r14d,r9d
and r12d,ebx
xor r13d,ebx
add r8d,DWORD PTR[12+rsp]
mov edi,r9d
xor r12d,edx
ror r14d,11
xor edi,r10d
add r8d,r12d
ror r13d,6
and r15d,edi
xor r14d,r9d
add r8d,r13d
xor r15d,r10d
ror r14d,2
add eax,r8d
add r8d,r15d
mov r13d,eax
add r14d,r8d
ror r13d,14
mov r8d,r14d
mov r12d,ebx
ror r14d,9
xor r13d,eax
xor r12d,ecx
ror r13d,5
xor r14d,r8d
and r12d,eax
xor r13d,eax
add edx,DWORD PTR[16+rsp]
mov r15d,r8d
xor r12d,ecx
ror r14d,11
xor r15d,r9d
add edx,r12d
ror r13d,6
and edi,r15d
xor r14d,r8d
add edx,r13d
xor edi,r9d
ror r14d,2
add r11d,edx
add edx,edi
mov r13d,r11d
add r14d,edx
ror r13d,14
mov edx,r14d
mov r12d,eax
ror r14d,9
xor r13d,r11d
xor r12d,ebx
ror r13d,5
xor r14d,edx
and r12d,r11d
xor r13d,r11d
add ecx,DWORD PTR[20+rsp]
mov edi,edx
xor r12d,ebx
ror r14d,11
xor edi,r8d
add ecx,r12d
ror r13d,6
and r15d,edi
xor r14d,edx
add ecx,r13d
xor r15d,r8d
ror r14d,2
add r10d,ecx
add ecx,r15d
mov r13d,r10d
add r14d,ecx
ror r13d,14
mov ecx,r14d
mov r12d,r11d
ror r14d,9
xor r13d,r10d
xor r12d,eax
ror r13d,5
xor r14d,ecx
and r12d,r10d
xor r13d,r10d
add ebx,DWORD PTR[24+rsp]
mov r15d,ecx
xor r12d,eax
ror r14d,11
xor r15d,edx
add ebx,r12d
ror r13d,6
and edi,r15d
xor r14d,ecx
add ebx,r13d
xor edi,edx
ror r14d,2
add r9d,ebx
add ebx,edi
mov r13d,r9d
add r14d,ebx
ror r13d,14
mov ebx,r14d
mov r12d,r10d
ror r14d,9
xor r13d,r9d
xor r12d,r11d
ror r13d,5
xor r14d,ebx
and r12d,r9d
xor r13d,r9d
add eax,DWORD PTR[28+rsp]
mov edi,ebx
xor r12d,r11d
ror r14d,11
xor edi,ecx
add eax,r12d
ror r13d,6
and r15d,edi
xor r14d,ebx
add eax,r13d
xor r15d,ecx
ror r14d,2
add r8d,eax
add eax,r15d
mov r13d,r8d
add r14d,eax
ror r13d,14
mov eax,r14d
mov r12d,r9d
ror r14d,9
xor r13d,r8d
xor r12d,r10d
ror r13d,5
xor r14d,eax
and r12d,r8d
xor r13d,r8d
add r11d,DWORD PTR[32+rsp]
mov r15d,eax
xor r12d,r10d
ror r14d,11
xor r15d,ebx
add r11d,r12d
ror r13d,6
and edi,r15d
xor r14d,eax
add r11d,r13d
xor edi,ebx
ror r14d,2
add edx,r11d
add r11d,edi
mov r13d,edx
add r14d,r11d
ror r13d,14
mov r11d,r14d
mov r12d,r8d
ror r14d,9
xor r13d,edx
xor r12d,r9d
ror r13d,5
xor r14d,r11d
and r12d,edx
xor r13d,edx
add r10d,DWORD PTR[36+rsp]
mov edi,r11d
xor r12d,r9d
ror r14d,11
xor edi,eax
add r10d,r12d
ror r13d,6
and r15d,edi
xor r14d,r11d
add r10d,r13d
xor r15d,eax
ror r14d,2
add ecx,r10d
add r10d,r15d
mov r13d,ecx
add r14d,r10d
ror r13d,14
mov r10d,r14d
mov r12d,edx
ror r14d,9
xor r13d,ecx
xor r12d,r8d
ror r13d,5
xor r14d,r10d
and r12d,ecx
xor r13d,ecx
add r9d,DWORD PTR[40+rsp]
mov r15d,r10d
xor r12d,r8d
ror r14d,11
xor r15d,r11d
add r9d,r12d
ror r13d,6
and edi,r15d
xor r14d,r10d
add r9d,r13d
xor edi,r11d
ror r14d,2
add ebx,r9d
add r9d,edi
mov r13d,ebx
add r14d,r9d
ror r13d,14
mov r9d,r14d
mov r12d,ecx
ror r14d,9
xor r13d,ebx
xor r12d,edx
ror r13d,5
xor r14d,r9d
and r12d,ebx
xor r13d,ebx
add r8d,DWORD PTR[44+rsp]
mov edi,r9d
xor r12d,edx
ror r14d,11
xor edi,r10d
add r8d,r12d
ror r13d,6
and r15d,edi
xor r14d,r9d
add r8d,r13d
xor r15d,r10d
ror r14d,2
add eax,r8d
add r8d,r15d
mov r13d,eax
add r14d,r8d
ror r13d,14
mov r8d,r14d
mov r12d,ebx
ror r14d,9
xor r13d,eax
xor r12d,ecx
ror r13d,5
xor r14d,r8d
and r12d,eax
xor r13d,eax
add edx,DWORD PTR[48+rsp]
mov r15d,r8d
xor r12d,ecx
ror r14d,11
xor r15d,r9d
add edx,r12d
ror r13d,6
and edi,r15d
xor r14d,r8d
add edx,r13d
xor edi,r9d
ror r14d,2
add r11d,edx
add edx,edi
mov r13d,r11d
add r14d,edx
ror r13d,14
mov edx,r14d
mov r12d,eax
ror r14d,9
xor r13d,r11d
xor r12d,ebx
ror r13d,5
xor r14d,edx
and r12d,r11d
xor r13d,r11d
add ecx,DWORD PTR[52+rsp]
mov edi,edx
xor r12d,ebx
ror r14d,11
xor edi,r8d
add ecx,r12d
ror r13d,6
and r15d,edi
xor r14d,edx
add ecx,r13d
xor r15d,r8d
ror r14d,2
add r10d,ecx
add ecx,r15d
mov r13d,r10d
add r14d,ecx
ror r13d,14
mov ecx,r14d
mov r12d,r11d
ror r14d,9
xor r13d,r10d
xor r12d,eax
ror r13d,5
xor r14d,ecx
and r12d,r10d
xor r13d,r10d
add ebx,DWORD PTR[56+rsp]
mov r15d,ecx
xor r12d,eax
ror r14d,11
xor r15d,edx
add ebx,r12d
ror r13d,6
and edi,r15d
xor r14d,ecx
add ebx,r13d
xor edi,edx
ror r14d,2
add r9d,ebx
add ebx,edi
mov r13d,r9d
add r14d,ebx
ror r13d,14
mov ebx,r14d
mov r12d,r10d
ror r14d,9
xor r13d,r9d
xor r12d,r11d
ror r13d,5
xor r14d,ebx
and r12d,r9d
xor r13d,r9d
add eax,DWORD PTR[60+rsp]
mov edi,ebx
xor r12d,r11d
ror r14d,11
xor edi,ecx
add eax,r12d
ror r13d,6
and r15d,edi
xor r14d,ebx
add eax,r13d
xor r15d,ecx
ror r14d,2
add r8d,eax
add eax,r15d
mov r13d,r8d
add r14d,eax
mov rdi,QWORD PTR[((-64))+rbp]
mov eax,r14d
mov rsi,QWORD PTR[((-56))+rbp]
ifdef __SGX_LVI_HARDENING__
lfence
endif
add eax,DWORD PTR[rdi]
add ebx,DWORD PTR[4+rdi]
add ecx,DWORD PTR[8+rdi]
add edx,DWORD PTR[12+rdi]
add r8d,DWORD PTR[16+rdi]
add r9d,DWORD PTR[20+rdi]
add r10d,DWORD PTR[24+rdi]
add r11d,DWORD PTR[28+rdi]
lea rsi,QWORD PTR[64+rsi]
cmp rsi,QWORD PTR[((-48))+rbp]
mov DWORD PTR[rdi],eax
mov DWORD PTR[4+rdi],ebx
mov DWORD PTR[8+rdi],ecx
mov DWORD PTR[12+rdi],edx
mov DWORD PTR[16+rdi],r8d
mov DWORD PTR[20+rdi],r9d
mov DWORD PTR[24+rdi],r10d
mov DWORD PTR[28+rdi],r11d
jb $L$loop_ssse3
xorps xmm0,xmm0
movaps XMMWORD PTR[rsp],xmm0
movaps XMMWORD PTR[16+rsp],xmm0
movaps XMMWORD PTR[32+rsp],xmm0
movaps XMMWORD PTR[48+rsp],xmm0
movaps xmm6,XMMWORD PTR[((-128))+rbp]
movaps xmm7,XMMWORD PTR[((-112))+rbp]
movaps xmm8,XMMWORD PTR[((-96))+rbp]
movaps xmm9,XMMWORD PTR[((-80))+rbp]
mov r15,QWORD PTR[((-40))+rbp]
mov r14,QWORD PTR[((-32))+rbp]
mov r13,QWORD PTR[((-24))+rbp]
mov r12,QWORD PTR[((-16))+rbp]
mov rbx,QWORD PTR[((-8))+rbp]
mov rsp,rbp
pop rbp
$L$SEH_epilogue_blst_sha256_block_data_order::
mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
mov rsi,QWORD PTR[16+rsp]
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
$L$SEH_end_blst_sha256_block_data_order::
blst_sha256_block_data_order ENDP
PUBLIC blst_sha256_emit
ALIGN 16
blst_sha256_emit PROC PUBLIC
DB 243,15,30,250
ifdef __SGX_LVI_HARDENING__
lfence
endif
mov r8,QWORD PTR[rdx]
mov r9,QWORD PTR[8+rdx]
mov r10,QWORD PTR[16+rdx]
bswap r8
mov r11,QWORD PTR[24+rdx]
bswap r9
mov DWORD PTR[4+rcx],r8d
bswap r10
mov DWORD PTR[12+rcx],r9d
bswap r11
mov DWORD PTR[20+rcx],r10d
shr r8,32
mov DWORD PTR[28+rcx],r11d
shr r9,32
mov DWORD PTR[rcx],r8d
shr r10,32
mov DWORD PTR[8+rcx],r9d
shr r11,32
mov DWORD PTR[16+rcx],r10d
mov DWORD PTR[24+rcx],r11d
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
blst_sha256_emit ENDP
PUBLIC blst_sha256_bcopy
ALIGN 16
blst_sha256_bcopy PROC PUBLIC
DB 243,15,30,250
ifdef __SGX_LVI_HARDENING__
lfence
endif
sub rcx,rdx
$L$oop_bcopy::
movzx eax,BYTE PTR[rdx]
lea rdx,QWORD PTR[1+rdx]
mov BYTE PTR[((-1))+rdx*1+rcx],al
dec r8
jnz $L$oop_bcopy
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
blst_sha256_bcopy ENDP
PUBLIC blst_sha256_hcopy
ALIGN 16
blst_sha256_hcopy PROC PUBLIC
DB 243,15,30,250
ifdef __SGX_LVI_HARDENING__
lfence
endif
mov r8,QWORD PTR[rdx]
mov r9,QWORD PTR[8+rdx]
mov r10,QWORD PTR[16+rdx]
mov r11,QWORD PTR[24+rdx]
mov QWORD PTR[rcx],r8
mov QWORD PTR[8+rcx],r9
mov QWORD PTR[16+rcx],r10
mov QWORD PTR[24+rcx],r11
ifdef __SGX_LVI_HARDENING__
pop rdx
lfence
jmp rdx
ud2
else
DB 0F3h,0C3h
endif
blst_sha256_hcopy ENDP
.text$ ENDS
.pdata SEGMENT READONLY ALIGN(4)
ALIGN 4
DD imagerel $L$SEH_begin_blst_sha256_block_data_order_shaext
DD imagerel $L$SEH_body_blst_sha256_block_data_order_shaext
DD imagerel $L$SEH_info_blst_sha256_block_data_order_shaext_prologue
DD imagerel $L$SEH_body_blst_sha256_block_data_order_shaext
DD imagerel $L$SEH_epilogue_blst_sha256_block_data_order_shaext
DD imagerel $L$SEH_info_blst_sha256_block_data_order_shaext_body
DD imagerel $L$SEH_epilogue_blst_sha256_block_data_order_shaext
DD imagerel $L$SEH_end_blst_sha256_block_data_order_shaext
DD imagerel $L$SEH_info_blst_sha256_block_data_order_shaext_epilogue
DD imagerel $L$SEH_begin_blst_sha256_block_data_order
DD imagerel $L$SEH_body_blst_sha256_block_data_order
DD imagerel $L$SEH_info_blst_sha256_block_data_order_prologue
DD imagerel $L$SEH_body_blst_sha256_block_data_order
DD imagerel $L$SEH_epilogue_blst_sha256_block_data_order
DD imagerel $L$SEH_info_blst_sha256_block_data_order_body
DD imagerel $L$SEH_epilogue_blst_sha256_block_data_order
DD imagerel $L$SEH_end_blst_sha256_block_data_order
DD imagerel $L$SEH_info_blst_sha256_block_data_order_epilogue
.pdata ENDS
.xdata SEGMENT READONLY ALIGN(8)
ALIGN 8
$L$SEH_info_blst_sha256_block_data_order_shaext_prologue::
DB 1,4,6,005h
DB 4,074h,2,0
DB 4,064h,3,0
DB 4,053h
DB 1,050h
DD 0,0
$L$SEH_info_blst_sha256_block_data_order_shaext_body::
DB 1,0,17,85
DB 000h,068h,000h,000h
DB 000h,078h,001h,000h
DB 000h,088h,002h,000h
DB 000h,098h,003h,000h
DB 000h,0a8h,004h,000h
DB 000h,074h,00ch,000h
DB 000h,064h,00dh,000h
DB 000h,053h
DB 000h,092h
DB 000h,050h
DB 000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h
$L$SEH_info_blst_sha256_block_data_order_shaext_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
$L$SEH_info_blst_sha256_block_data_order_prologue::
DB 1,4,6,005h
DB 4,074h,2,0
DB 4,064h,3,0
DB 4,053h
DB 1,050h
DD 0,0
$L$SEH_info_blst_sha256_block_data_order_body::
DB 1,0,25,133
DB 000h,068h,000h,000h
DB 000h,078h,001h,000h
DB 000h,088h,002h,000h
DB 000h,098h,003h,000h
DB 000h,0f4h,00bh,000h
DB 000h,0e4h,00ch,000h
DB 000h,0d4h,00dh,000h
DB 000h,0c4h,00eh,000h
DB 000h,034h,00fh,000h
DB 000h,074h,012h,000h
DB 000h,064h,013h,000h
DB 000h,053h
DB 000h,0f2h
DB 000h,050h
DB 000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h
$L$SEH_info_blst_sha256_block_data_order_epilogue::
DB 1,0,4,0
DB 000h,074h,001h,000h
DB 000h,064h,002h,000h
DB 000h,000h,000h,000h
.xdata ENDS
END