Import OpenSSL 1.0.2s

This commit is contained in:
Steve Dower
2019-06-17 08:41:08 -07:00
parent 4155d3c2bd
commit e6c823a7e5
125 changed files with 136502 additions and 136422 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,374 +1,374 @@
%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
;extern _OPENSSL_ia32cap_P
global _RC4
align 16
_RC4:
L$_RC4_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov edx,DWORD [24+esp]
mov esi,DWORD [28+esp]
mov ebp,DWORD [32+esp]
xor eax,eax
xor ebx,ebx
cmp edx,0
je NEAR L$000abort
mov al,BYTE [edi]
mov bl,BYTE [4+edi]
add edi,8
lea ecx,[edx*1+esi]
sub ebp,esi
mov DWORD [24+esp],ecx
inc al
cmp DWORD [256+edi],-1
je NEAR L$001RC4_CHAR
mov ecx,DWORD [eax*4+edi]
and edx,-4
jz NEAR L$002loop1
mov DWORD [32+esp],ebp
test edx,-8
jz NEAR L$003go4loop4
lea ebp,[_OPENSSL_ia32cap_P]
bt DWORD [ebp],26
jnc NEAR L$003go4loop4
mov ebp,DWORD [32+esp]
and edx,-8
lea edx,[edx*1+esi-8]
mov DWORD [edi-4],edx
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
movq mm0,[esi]
mov ecx,DWORD [eax*4+edi]
movd mm2,DWORD [edx*4+edi]
jmp NEAR L$004loop_mmx_enter
align 16
L$005loop_mmx:
add bl,cl
psllq mm1,56
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
movq mm0,[esi]
movq [esi*1+ebp-8],mm2
mov ecx,DWORD [eax*4+edi]
movd mm2,DWORD [edx*4+edi]
L$004loop_mmx_enter:
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm0
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,8
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,16
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,24
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,32
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,40
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,48
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
mov edx,ebx
xor ebx,ebx
mov bl,dl
cmp esi,DWORD [edi-4]
lea esi,[8+esi]
jb NEAR L$005loop_mmx
psllq mm1,56
pxor mm2,mm1
movq [esi*1+ebp-8],mm2
emms
cmp esi,DWORD [24+esp]
je NEAR L$006done
jmp NEAR L$002loop1
align 16
L$003go4loop4:
lea edx,[edx*1+esi-4]
mov DWORD [28+esp],edx
L$007loop4:
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
mov ecx,DWORD [eax*4+edi]
mov ebp,DWORD [edx*4+edi]
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
ror ebp,8
mov ecx,DWORD [eax*4+edi]
or ebp,DWORD [edx*4+edi]
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
ror ebp,8
mov ecx,DWORD [eax*4+edi]
or ebp,DWORD [edx*4+edi]
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
ror ebp,8
mov ecx,DWORD [32+esp]
or ebp,DWORD [edx*4+edi]
ror ebp,8
xor ebp,DWORD [esi]
cmp esi,DWORD [28+esp]
mov DWORD [esi*1+ecx],ebp
lea esi,[4+esi]
mov ecx,DWORD [eax*4+edi]
jb NEAR L$007loop4
cmp esi,DWORD [24+esp]
je NEAR L$006done
mov ebp,DWORD [32+esp]
align 16
L$002loop1:
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
mov edx,DWORD [edx*4+edi]
xor dl,BYTE [esi]
lea esi,[1+esi]
mov ecx,DWORD [eax*4+edi]
cmp esi,DWORD [24+esp]
mov BYTE [esi*1+ebp-1],dl
jb NEAR L$002loop1
jmp NEAR L$006done
align 16
L$001RC4_CHAR:
movzx ecx,BYTE [eax*1+edi]
L$008cloop1:
add bl,cl
movzx edx,BYTE [ebx*1+edi]
mov BYTE [ebx*1+edi],cl
mov BYTE [eax*1+edi],dl
add dl,cl
movzx edx,BYTE [edx*1+edi]
add al,1
xor dl,BYTE [esi]
lea esi,[1+esi]
movzx ecx,BYTE [eax*1+edi]
cmp esi,DWORD [24+esp]
mov BYTE [esi*1+ebp-1],dl
jb NEAR L$008cloop1
L$006done:
dec al
mov DWORD [edi-4],ebx
mov BYTE [edi-8],al
L$000abort:
pop edi
pop esi
pop ebx
pop ebp
ret
global _private_RC4_set_key
align 16
_private_RC4_set_key:
L$_private_RC4_set_key_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov ebp,DWORD [24+esp]
mov esi,DWORD [28+esp]
lea edx,[_OPENSSL_ia32cap_P]
lea edi,[8+edi]
lea esi,[ebp*1+esi]
neg ebp
xor eax,eax
mov DWORD [edi-4],ebp
bt DWORD [edx],20
jc NEAR L$009c1stloop
align 16
L$010w1stloop:
mov DWORD [eax*4+edi],eax
add al,1
jnc NEAR L$010w1stloop
xor ecx,ecx
xor edx,edx
align 16
L$011w2ndloop:
mov eax,DWORD [ecx*4+edi]
add dl,BYTE [ebp*1+esi]
add dl,al
add ebp,1
mov ebx,DWORD [edx*4+edi]
jnz NEAR L$012wnowrap
mov ebp,DWORD [edi-4]
L$012wnowrap:
mov DWORD [edx*4+edi],eax
mov DWORD [ecx*4+edi],ebx
add cl,1
jnc NEAR L$011w2ndloop
jmp NEAR L$013exit
align 16
L$009c1stloop:
mov BYTE [eax*1+edi],al
add al,1
jnc NEAR L$009c1stloop
xor ecx,ecx
xor edx,edx
xor ebx,ebx
align 16
L$014c2ndloop:
mov al,BYTE [ecx*1+edi]
add dl,BYTE [ebp*1+esi]
add dl,al
add ebp,1
mov bl,BYTE [edx*1+edi]
jnz NEAR L$015cnowrap
mov ebp,DWORD [edi-4]
L$015cnowrap:
mov BYTE [edx*1+edi],al
mov BYTE [ecx*1+edi],bl
add cl,1
jnc NEAR L$014c2ndloop
mov DWORD [256+edi],-1
L$013exit:
xor eax,eax
mov DWORD [edi-8],eax
mov DWORD [edi-4],eax
pop edi
pop esi
pop ebx
pop ebp
ret
global _RC4_options
align 16
_RC4_options:
L$_RC4_options_begin:
call L$016pic_point
L$016pic_point:
pop eax
lea eax,[(L$017opts-L$016pic_point)+eax]
lea edx,[_OPENSSL_ia32cap_P]
mov edx,DWORD [edx]
bt edx,20
jc NEAR L$0181xchar
bt edx,26
jnc NEAR L$019ret
add eax,25
ret
L$0181xchar:
add eax,12
L$019ret:
ret
align 64
L$017opts:
db 114,99,52,40,52,120,44,105,110,116,41,0
db 114,99,52,40,49,120,44,99,104,97,114,41,0
db 114,99,52,40,56,120,44,109,109,120,41,0
db 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
align 64
segment .bss
common _OPENSSL_ia32cap_P 16
%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
;extern _OPENSSL_ia32cap_P
global _RC4
align 16
_RC4:
L$_RC4_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov edx,DWORD [24+esp]
mov esi,DWORD [28+esp]
mov ebp,DWORD [32+esp]
xor eax,eax
xor ebx,ebx
cmp edx,0
je NEAR L$000abort
mov al,BYTE [edi]
mov bl,BYTE [4+edi]
add edi,8
lea ecx,[edx*1+esi]
sub ebp,esi
mov DWORD [24+esp],ecx
inc al
cmp DWORD [256+edi],-1
je NEAR L$001RC4_CHAR
mov ecx,DWORD [eax*4+edi]
and edx,-4
jz NEAR L$002loop1
mov DWORD [32+esp],ebp
test edx,-8
jz NEAR L$003go4loop4
lea ebp,[_OPENSSL_ia32cap_P]
bt DWORD [ebp],26
jnc NEAR L$003go4loop4
mov ebp,DWORD [32+esp]
and edx,-8
lea edx,[edx*1+esi-8]
mov DWORD [edi-4],edx
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
movq mm0,[esi]
mov ecx,DWORD [eax*4+edi]
movd mm2,DWORD [edx*4+edi]
jmp NEAR L$004loop_mmx_enter
align 16
L$005loop_mmx:
add bl,cl
psllq mm1,56
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
movq mm0,[esi]
movq [esi*1+ebp-8],mm2
mov ecx,DWORD [eax*4+edi]
movd mm2,DWORD [edx*4+edi]
L$004loop_mmx_enter:
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm0
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,8
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,16
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,24
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,32
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,40
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
add bl,cl
psllq mm1,48
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
inc eax
add edx,ecx
movzx eax,al
movzx edx,dl
pxor mm2,mm1
mov ecx,DWORD [eax*4+edi]
movd mm1,DWORD [edx*4+edi]
mov edx,ebx
xor ebx,ebx
mov bl,dl
cmp esi,DWORD [edi-4]
lea esi,[8+esi]
jb NEAR L$005loop_mmx
psllq mm1,56
pxor mm2,mm1
movq [esi*1+ebp-8],mm2
emms
cmp esi,DWORD [24+esp]
je NEAR L$006done
jmp NEAR L$002loop1
align 16
L$003go4loop4:
lea edx,[edx*1+esi-4]
mov DWORD [28+esp],edx
L$007loop4:
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
mov ecx,DWORD [eax*4+edi]
mov ebp,DWORD [edx*4+edi]
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
ror ebp,8
mov ecx,DWORD [eax*4+edi]
or ebp,DWORD [edx*4+edi]
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
ror ebp,8
mov ecx,DWORD [eax*4+edi]
or ebp,DWORD [edx*4+edi]
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
ror ebp,8
mov ecx,DWORD [32+esp]
or ebp,DWORD [edx*4+edi]
ror ebp,8
xor ebp,DWORD [esi]
cmp esi,DWORD [28+esp]
mov DWORD [esi*1+ecx],ebp
lea esi,[4+esi]
mov ecx,DWORD [eax*4+edi]
jb NEAR L$007loop4
cmp esi,DWORD [24+esp]
je NEAR L$006done
mov ebp,DWORD [32+esp]
align 16
L$002loop1:
add bl,cl
mov edx,DWORD [ebx*4+edi]
mov DWORD [ebx*4+edi],ecx
mov DWORD [eax*4+edi],edx
add edx,ecx
inc al
and edx,255
mov edx,DWORD [edx*4+edi]
xor dl,BYTE [esi]
lea esi,[1+esi]
mov ecx,DWORD [eax*4+edi]
cmp esi,DWORD [24+esp]
mov BYTE [esi*1+ebp-1],dl
jb NEAR L$002loop1
jmp NEAR L$006done
align 16
L$001RC4_CHAR:
movzx ecx,BYTE [eax*1+edi]
L$008cloop1:
add bl,cl
movzx edx,BYTE [ebx*1+edi]
mov BYTE [ebx*1+edi],cl
mov BYTE [eax*1+edi],dl
add dl,cl
movzx edx,BYTE [edx*1+edi]
add al,1
xor dl,BYTE [esi]
lea esi,[1+esi]
movzx ecx,BYTE [eax*1+edi]
cmp esi,DWORD [24+esp]
mov BYTE [esi*1+ebp-1],dl
jb NEAR L$008cloop1
L$006done:
dec al
mov DWORD [edi-4],ebx
mov BYTE [edi-8],al
L$000abort:
pop edi
pop esi
pop ebx
pop ebp
ret
global _private_RC4_set_key
align 16
_private_RC4_set_key:
L$_private_RC4_set_key_begin:
push ebp
push ebx
push esi
push edi
mov edi,DWORD [20+esp]
mov ebp,DWORD [24+esp]
mov esi,DWORD [28+esp]
lea edx,[_OPENSSL_ia32cap_P]
lea edi,[8+edi]
lea esi,[ebp*1+esi]
neg ebp
xor eax,eax
mov DWORD [edi-4],ebp
bt DWORD [edx],20
jc NEAR L$009c1stloop
align 16
L$010w1stloop:
mov DWORD [eax*4+edi],eax
add al,1
jnc NEAR L$010w1stloop
xor ecx,ecx
xor edx,edx
align 16
L$011w2ndloop:
mov eax,DWORD [ecx*4+edi]
add dl,BYTE [ebp*1+esi]
add dl,al
add ebp,1
mov ebx,DWORD [edx*4+edi]
jnz NEAR L$012wnowrap
mov ebp,DWORD [edi-4]
L$012wnowrap:
mov DWORD [edx*4+edi],eax
mov DWORD [ecx*4+edi],ebx
add cl,1
jnc NEAR L$011w2ndloop
jmp NEAR L$013exit
align 16
L$009c1stloop:
mov BYTE [eax*1+edi],al
add al,1
jnc NEAR L$009c1stloop
xor ecx,ecx
xor edx,edx
xor ebx,ebx
align 16
L$014c2ndloop:
mov al,BYTE [ecx*1+edi]
add dl,BYTE [ebp*1+esi]
add dl,al
add ebp,1
mov bl,BYTE [edx*1+edi]
jnz NEAR L$015cnowrap
mov ebp,DWORD [edi-4]
L$015cnowrap:
mov BYTE [edx*1+edi],al
mov BYTE [ecx*1+edi],bl
add cl,1
jnc NEAR L$014c2ndloop
mov DWORD [256+edi],-1
L$013exit:
xor eax,eax
mov DWORD [edi-8],eax
mov DWORD [edi-4],eax
pop edi
pop esi
pop ebx
pop ebp
ret
global _RC4_options
align 16
_RC4_options:
L$_RC4_options_begin:
call L$016pic_point
L$016pic_point:
pop eax
lea eax,[(L$017opts-L$016pic_point)+eax]
lea edx,[_OPENSSL_ia32cap_P]
mov edx,DWORD [edx]
bt edx,20
jc NEAR L$0181xchar
bt edx,26
jnc NEAR L$019ret
add eax,25
ret
L$0181xchar:
add eax,12
L$019ret:
ret
align 64
L$017opts:
db 114,99,52,40,52,120,44,105,110,116,41,0
db 114,99,52,40,49,120,44,99,104,97,114,41,0
db 114,99,52,40,56,120,44,109,109,120,41,0
db 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
align 64
segment .bss
common _OPENSSL_ia32cap_P 16

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,345 +1,345 @@
%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
;extern _OPENSSL_ia32cap_P
align 16
__mul_1x1_mmx:
sub esp,36
mov ecx,eax
lea edx,[eax*1+eax]
and ecx,1073741823
lea ebp,[edx*1+edx]
mov DWORD [esp],0
and edx,2147483647
movd mm2,eax
movd mm3,ebx
mov DWORD [4+esp],ecx
xor ecx,edx
pxor mm5,mm5
pxor mm4,mm4
mov DWORD [8+esp],edx
xor edx,ebp
mov DWORD [12+esp],ecx
pcmpgtd mm5,mm2
paddd mm2,mm2
xor ecx,edx
mov DWORD [16+esp],ebp
xor ebp,edx
pand mm5,mm3
pcmpgtd mm4,mm2
mov DWORD [20+esp],ecx
xor ebp,ecx
psllq mm5,31
pand mm4,mm3
mov DWORD [24+esp],edx
mov esi,7
mov DWORD [28+esp],ebp
mov ebp,esi
and esi,ebx
shr ebx,3
mov edi,ebp
psllq mm4,30
and edi,ebx
shr ebx,3
movd mm0,DWORD [esi*4+esp]
mov esi,ebp
and esi,ebx
shr ebx,3
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,3
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,6
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,9
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,12
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,15
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,18
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,21
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,24
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
pxor mm0,mm4
psllq mm2,27
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
pxor mm0,mm5
psllq mm1,30
add esp,36
pxor mm0,mm1
ret
align 16
__mul_1x1_ialu:
sub esp,36
mov ecx,eax
lea edx,[eax*1+eax]
lea ebp,[eax*4]
and ecx,1073741823
lea edi,[eax*1+eax]
sar eax,31
mov DWORD [esp],0
and edx,2147483647
mov DWORD [4+esp],ecx
xor ecx,edx
mov DWORD [8+esp],edx
xor edx,ebp
mov DWORD [12+esp],ecx
xor ecx,edx
mov DWORD [16+esp],ebp
xor ebp,edx
mov DWORD [20+esp],ecx
xor ebp,ecx
sar edi,31
and eax,ebx
mov DWORD [24+esp],edx
and edi,ebx
mov DWORD [28+esp],ebp
mov edx,eax
shl eax,31
mov ecx,edi
shr edx,1
mov esi,7
shl edi,30
and esi,ebx
shr ecx,2
xor eax,edi
shr ebx,3
mov edi,7
and edi,ebx
shr ebx,3
xor edx,ecx
xor eax,DWORD [esi*4+esp]
mov esi,7
and esi,ebx
shr ebx,3
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,3
and edi,ebx
shr ecx,29
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,6
and esi,ebx
shr ebp,26
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,9
and edi,ebx
shr ecx,23
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,12
and esi,ebx
shr ebp,20
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,15
and edi,ebx
shr ecx,17
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,18
and esi,ebx
shr ebp,14
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,21
and edi,ebx
shr ecx,11
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,24
and esi,ebx
shr ebp,8
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov ecx,ebp
shl ebp,27
mov edi,DWORD [esi*4+esp]
shr ecx,5
mov esi,edi
xor eax,ebp
shl edi,30
xor edx,ecx
shr esi,2
xor eax,edi
xor edx,esi
add esp,36
ret
global _bn_GF2m_mul_2x2
align 16
_bn_GF2m_mul_2x2:
L$_bn_GF2m_mul_2x2_begin:
lea edx,[_OPENSSL_ia32cap_P]
mov eax,DWORD [edx]
mov edx,DWORD [4+edx]
test eax,8388608
jz NEAR L$000ialu
test eax,16777216
jz NEAR L$001mmx
test edx,2
jz NEAR L$001mmx
movups xmm0,[8+esp]
shufps xmm0,xmm0,177
db 102,15,58,68,192,1
mov eax,DWORD [4+esp]
movups [eax],xmm0
ret
align 16
L$001mmx:
push ebp
push ebx
push esi
push edi
mov eax,DWORD [24+esp]
mov ebx,DWORD [32+esp]
call __mul_1x1_mmx
movq mm7,mm0
mov eax,DWORD [28+esp]
mov ebx,DWORD [36+esp]
call __mul_1x1_mmx
movq mm6,mm0
mov eax,DWORD [24+esp]
mov ebx,DWORD [32+esp]
xor eax,DWORD [28+esp]
xor ebx,DWORD [36+esp]
call __mul_1x1_mmx
pxor mm0,mm7
mov eax,DWORD [20+esp]
pxor mm0,mm6
movq mm2,mm0
psllq mm0,32
pop edi
psrlq mm2,32
pop esi
pxor mm0,mm6
pop ebx
pxor mm2,mm7
movq [eax],mm0
pop ebp
movq [8+eax],mm2
emms
ret
align 16
L$000ialu:
push ebp
push ebx
push esi
push edi
sub esp,20
mov eax,DWORD [44+esp]
mov ebx,DWORD [52+esp]
call __mul_1x1_ialu
mov DWORD [8+esp],eax
mov DWORD [12+esp],edx
mov eax,DWORD [48+esp]
mov ebx,DWORD [56+esp]
call __mul_1x1_ialu
mov DWORD [esp],eax
mov DWORD [4+esp],edx
mov eax,DWORD [44+esp]
mov ebx,DWORD [52+esp]
xor eax,DWORD [48+esp]
xor ebx,DWORD [56+esp]
call __mul_1x1_ialu
mov ebp,DWORD [40+esp]
mov ebx,DWORD [esp]
mov ecx,DWORD [4+esp]
mov edi,DWORD [8+esp]
mov esi,DWORD [12+esp]
xor eax,edx
xor edx,ecx
xor eax,ebx
mov DWORD [ebp],ebx
xor edx,edi
mov DWORD [12+ebp],esi
xor eax,esi
add esp,20
xor edx,esi
pop edi
xor eax,edx
pop esi
mov DWORD [8+ebp],edx
pop ebx
mov DWORD [4+ebp],eax
pop ebp
ret
db 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
db 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
db 62,0
segment .bss
common _OPENSSL_ia32cap_P 16
%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
;extern _OPENSSL_ia32cap_P
align 16
__mul_1x1_mmx:
sub esp,36
mov ecx,eax
lea edx,[eax*1+eax]
and ecx,1073741823
lea ebp,[edx*1+edx]
mov DWORD [esp],0
and edx,2147483647
movd mm2,eax
movd mm3,ebx
mov DWORD [4+esp],ecx
xor ecx,edx
pxor mm5,mm5
pxor mm4,mm4
mov DWORD [8+esp],edx
xor edx,ebp
mov DWORD [12+esp],ecx
pcmpgtd mm5,mm2
paddd mm2,mm2
xor ecx,edx
mov DWORD [16+esp],ebp
xor ebp,edx
pand mm5,mm3
pcmpgtd mm4,mm2
mov DWORD [20+esp],ecx
xor ebp,ecx
psllq mm5,31
pand mm4,mm3
mov DWORD [24+esp],edx
mov esi,7
mov DWORD [28+esp],ebp
mov ebp,esi
and esi,ebx
shr ebx,3
mov edi,ebp
psllq mm4,30
and edi,ebx
shr ebx,3
movd mm0,DWORD [esi*4+esp]
mov esi,ebp
and esi,ebx
shr ebx,3
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,3
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,6
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,9
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,12
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,15
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,18
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
mov edi,ebp
psllq mm2,21
and edi,ebx
shr ebx,3
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
mov esi,ebp
psllq mm1,24
and esi,ebx
shr ebx,3
pxor mm0,mm1
movd mm2,DWORD [edi*4+esp]
pxor mm0,mm4
psllq mm2,27
pxor mm0,mm2
movd mm1,DWORD [esi*4+esp]
pxor mm0,mm5
psllq mm1,30
add esp,36
pxor mm0,mm1
ret
align 16
__mul_1x1_ialu:
sub esp,36
mov ecx,eax
lea edx,[eax*1+eax]
lea ebp,[eax*4]
and ecx,1073741823
lea edi,[eax*1+eax]
sar eax,31
mov DWORD [esp],0
and edx,2147483647
mov DWORD [4+esp],ecx
xor ecx,edx
mov DWORD [8+esp],edx
xor edx,ebp
mov DWORD [12+esp],ecx
xor ecx,edx
mov DWORD [16+esp],ebp
xor ebp,edx
mov DWORD [20+esp],ecx
xor ebp,ecx
sar edi,31
and eax,ebx
mov DWORD [24+esp],edx
and edi,ebx
mov DWORD [28+esp],ebp
mov edx,eax
shl eax,31
mov ecx,edi
shr edx,1
mov esi,7
shl edi,30
and esi,ebx
shr ecx,2
xor eax,edi
shr ebx,3
mov edi,7
and edi,ebx
shr ebx,3
xor edx,ecx
xor eax,DWORD [esi*4+esp]
mov esi,7
and esi,ebx
shr ebx,3
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,3
and edi,ebx
shr ecx,29
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,6
and esi,ebx
shr ebp,26
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,9
and edi,ebx
shr ecx,23
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,12
and esi,ebx
shr ebp,20
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,15
and edi,ebx
shr ecx,17
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,18
and esi,ebx
shr ebp,14
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov edi,7
mov ecx,ebp
shl ebp,21
and edi,ebx
shr ecx,11
xor eax,ebp
shr ebx,3
xor edx,ecx
mov ecx,DWORD [esi*4+esp]
mov esi,7
mov ebp,ecx
shl ecx,24
and esi,ebx
shr ebp,8
xor eax,ecx
shr ebx,3
xor edx,ebp
mov ebp,DWORD [edi*4+esp]
mov ecx,ebp
shl ebp,27
mov edi,DWORD [esi*4+esp]
shr ecx,5
mov esi,edi
xor eax,ebp
shl edi,30
xor edx,ecx
shr esi,2
xor eax,edi
xor edx,esi
add esp,36
ret
global _bn_GF2m_mul_2x2
align 16
_bn_GF2m_mul_2x2:
L$_bn_GF2m_mul_2x2_begin:
lea edx,[_OPENSSL_ia32cap_P]
mov eax,DWORD [edx]
mov edx,DWORD [4+edx]
test eax,8388608
jz NEAR L$000ialu
test eax,16777216
jz NEAR L$001mmx
test edx,2
jz NEAR L$001mmx
movups xmm0,[8+esp]
shufps xmm0,xmm0,177
db 102,15,58,68,192,1
mov eax,DWORD [4+esp]
movups [eax],xmm0
ret
align 16
L$001mmx:
push ebp
push ebx
push esi
push edi
mov eax,DWORD [24+esp]
mov ebx,DWORD [32+esp]
call __mul_1x1_mmx
movq mm7,mm0
mov eax,DWORD [28+esp]
mov ebx,DWORD [36+esp]
call __mul_1x1_mmx
movq mm6,mm0
mov eax,DWORD [24+esp]
mov ebx,DWORD [32+esp]
xor eax,DWORD [28+esp]
xor ebx,DWORD [36+esp]
call __mul_1x1_mmx
pxor mm0,mm7
mov eax,DWORD [20+esp]
pxor mm0,mm6
movq mm2,mm0
psllq mm0,32
pop edi
psrlq mm2,32
pop esi
pxor mm0,mm6
pop ebx
pxor mm2,mm7
movq [eax],mm0
pop ebp
movq [8+eax],mm2
emms
ret
align 16
L$000ialu:
push ebp
push ebx
push esi
push edi
sub esp,20
mov eax,DWORD [44+esp]
mov ebx,DWORD [52+esp]
call __mul_1x1_ialu
mov DWORD [8+esp],eax
mov DWORD [12+esp],edx
mov eax,DWORD [48+esp]
mov ebx,DWORD [56+esp]
call __mul_1x1_ialu
mov DWORD [esp],eax
mov DWORD [4+esp],edx
mov eax,DWORD [44+esp]
mov ebx,DWORD [52+esp]
xor eax,DWORD [48+esp]
xor ebx,DWORD [56+esp]
call __mul_1x1_ialu
mov ebp,DWORD [40+esp]
mov ebx,DWORD [esp]
mov ecx,DWORD [4+esp]
mov edi,DWORD [8+esp]
mov esi,DWORD [12+esp]
xor eax,edx
xor edx,ecx
xor eax,ebx
mov DWORD [ebp],ebx
xor edx,edi
mov DWORD [12+ebp],esi
xor eax,esi
add esp,20
xor edx,esi
pop edi
xor eax,edx
pop esi
mov DWORD [8+ebp],edx
pop ebx
mov DWORD [4+ebp],eax
pop ebp
ret
db 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
db 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
db 62,0
segment .bss
common _OPENSSL_ia32cap_P 16

View File

@@ -1,479 +1,479 @@
%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
;extern _OPENSSL_ia32cap_P
global _bn_mul_mont
align 16
_bn_mul_mont:
L$_bn_mul_mont_begin:
push ebp
push ebx
push esi
push edi
xor eax,eax
mov edi,DWORD [40+esp]
cmp edi,4
jl NEAR L$000just_leave
lea esi,[20+esp]
lea edx,[24+esp]
add edi,2
neg edi
lea ebp,[edi*4+esp-32]
neg edi
mov eax,ebp
sub eax,edx
and eax,2047
sub ebp,eax
xor edx,ebp
and edx,2048
xor edx,2048
sub ebp,edx
and ebp,-64
mov eax,esp
sub eax,ebp
and eax,-4096
mov edx,esp
lea esp,[eax*1+ebp]
mov eax,DWORD [esp]
cmp esp,ebp
ja NEAR L$001page_walk
jmp NEAR L$002page_walk_done
align 16
L$001page_walk:
lea esp,[esp-4096]
mov eax,DWORD [esp]
cmp esp,ebp
ja NEAR L$001page_walk
L$002page_walk_done:
mov eax,DWORD [esi]
mov ebx,DWORD [4+esi]
mov ecx,DWORD [8+esi]
mov ebp,DWORD [12+esi]
mov esi,DWORD [16+esi]
mov esi,DWORD [esi]
mov DWORD [4+esp],eax
mov DWORD [8+esp],ebx
mov DWORD [12+esp],ecx
mov DWORD [16+esp],ebp
mov DWORD [20+esp],esi
lea ebx,[edi-3]
mov DWORD [24+esp],edx
lea eax,[_OPENSSL_ia32cap_P]
bt DWORD [eax],26
jnc NEAR L$003non_sse2
mov eax,-1
movd mm7,eax
mov esi,DWORD [8+esp]
mov edi,DWORD [12+esp]
mov ebp,DWORD [16+esp]
xor edx,edx
xor ecx,ecx
movd mm4,DWORD [edi]
movd mm5,DWORD [esi]
movd mm3,DWORD [ebp]
pmuludq mm5,mm4
movq mm2,mm5
movq mm0,mm5
pand mm0,mm7
pmuludq mm5,[20+esp]
pmuludq mm3,mm5
paddq mm3,mm0
movd mm1,DWORD [4+ebp]
movd mm0,DWORD [4+esi]
psrlq mm2,32
psrlq mm3,32
inc ecx
align 16
L$0041st:
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
pand mm0,mm7
movd mm1,DWORD [4+ecx*4+ebp]
paddq mm3,mm0
movd mm0,DWORD [4+ecx*4+esi]
psrlq mm2,32
movd DWORD [28+ecx*4+esp],mm3
psrlq mm3,32
lea ecx,[1+ecx]
cmp ecx,ebx
jl NEAR L$0041st
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
pand mm0,mm7
paddq mm3,mm0
movd DWORD [28+ecx*4+esp],mm3
psrlq mm2,32
psrlq mm3,32
paddq mm3,mm2
movq [32+ebx*4+esp],mm3
inc edx
L$005outer:
xor ecx,ecx
movd mm4,DWORD [edx*4+edi]
movd mm5,DWORD [esi]
movd mm6,DWORD [32+esp]
movd mm3,DWORD [ebp]
pmuludq mm5,mm4
paddq mm5,mm6
movq mm0,mm5
movq mm2,mm5
pand mm0,mm7
pmuludq mm5,[20+esp]
pmuludq mm3,mm5
paddq mm3,mm0
movd mm6,DWORD [36+esp]
movd mm1,DWORD [4+ebp]
movd mm0,DWORD [4+esi]
psrlq mm2,32
psrlq mm3,32
paddq mm2,mm6
inc ecx
dec ebx
L$006inner:
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
movd mm6,DWORD [36+ecx*4+esp]
pand mm0,mm7
movd mm1,DWORD [4+ecx*4+ebp]
paddq mm3,mm0
movd mm0,DWORD [4+ecx*4+esi]
psrlq mm2,32
movd DWORD [28+ecx*4+esp],mm3
psrlq mm3,32
paddq mm2,mm6
dec ebx
lea ecx,[1+ecx]
jnz NEAR L$006inner
mov ebx,ecx
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
pand mm0,mm7
paddq mm3,mm0
movd DWORD [28+ecx*4+esp],mm3
psrlq mm2,32
psrlq mm3,32
movd mm6,DWORD [36+ebx*4+esp]
paddq mm3,mm2
paddq mm3,mm6
movq [32+ebx*4+esp],mm3
lea edx,[1+edx]
cmp edx,ebx
jle NEAR L$005outer
emms
jmp NEAR L$007common_tail
align 16
L$003non_sse2:
mov esi,DWORD [8+esp]
lea ebp,[1+ebx]
mov edi,DWORD [12+esp]
xor ecx,ecx
mov edx,esi
and ebp,1
sub edx,edi
lea eax,[4+ebx*4+edi]
or ebp,edx
mov edi,DWORD [edi]
jz NEAR L$008bn_sqr_mont
mov DWORD [28+esp],eax
mov eax,DWORD [esi]
xor edx,edx
align 16
L$009mull:
mov ebp,edx
mul edi
add ebp,eax
lea ecx,[1+ecx]
adc edx,0
mov eax,DWORD [ecx*4+esi]
cmp ecx,ebx
mov DWORD [28+ecx*4+esp],ebp
jl NEAR L$009mull
mov ebp,edx
mul edi
mov edi,DWORD [20+esp]
add eax,ebp
mov esi,DWORD [16+esp]
adc edx,0
imul edi,DWORD [32+esp]
mov DWORD [32+ebx*4+esp],eax
xor ecx,ecx
mov DWORD [36+ebx*4+esp],edx
mov DWORD [40+ebx*4+esp],ecx
mov eax,DWORD [esi]
mul edi
add eax,DWORD [32+esp]
mov eax,DWORD [4+esi]
adc edx,0
inc ecx
jmp NEAR L$0102ndmadd
align 16
L$0111stmadd:
mov ebp,edx
mul edi
add ebp,DWORD [32+ecx*4+esp]
lea ecx,[1+ecx]
adc edx,0
add ebp,eax
mov eax,DWORD [ecx*4+esi]
adc edx,0
cmp ecx,ebx
mov DWORD [28+ecx*4+esp],ebp
jl NEAR L$0111stmadd
mov ebp,edx
mul edi
add eax,DWORD [32+ebx*4+esp]
mov edi,DWORD [20+esp]
adc edx,0
mov esi,DWORD [16+esp]
add ebp,eax
adc edx,0
imul edi,DWORD [32+esp]
xor ecx,ecx
add edx,DWORD [36+ebx*4+esp]
mov DWORD [32+ebx*4+esp],ebp
adc ecx,0
mov eax,DWORD [esi]
mov DWORD [36+ebx*4+esp],edx
mov DWORD [40+ebx*4+esp],ecx
mul edi
add eax,DWORD [32+esp]
mov eax,DWORD [4+esi]
adc edx,0
mov ecx,1
align 16
L$0102ndmadd:
mov ebp,edx
mul edi
add ebp,DWORD [32+ecx*4+esp]
lea ecx,[1+ecx]
adc edx,0
add ebp,eax
mov eax,DWORD [ecx*4+esi]
adc edx,0
cmp ecx,ebx
mov DWORD [24+ecx*4+esp],ebp
jl NEAR L$0102ndmadd
mov ebp,edx
mul edi
add ebp,DWORD [32+ebx*4+esp]
adc edx,0
add ebp,eax
adc edx,0
mov DWORD [28+ebx*4+esp],ebp
xor eax,eax
mov ecx,DWORD [12+esp]
add edx,DWORD [36+ebx*4+esp]
adc eax,DWORD [40+ebx*4+esp]
lea ecx,[4+ecx]
mov DWORD [32+ebx*4+esp],edx
cmp ecx,DWORD [28+esp]
mov DWORD [36+ebx*4+esp],eax
je NEAR L$007common_tail
mov edi,DWORD [ecx]
mov esi,DWORD [8+esp]
mov DWORD [12+esp],ecx
xor ecx,ecx
xor edx,edx
mov eax,DWORD [esi]
jmp NEAR L$0111stmadd
align 16
L$008bn_sqr_mont:
mov DWORD [esp],ebx
mov DWORD [12+esp],ecx
mov eax,edi
mul edi
mov DWORD [32+esp],eax
mov ebx,edx
shr edx,1
and ebx,1
inc ecx
align 16
L$012sqr:
mov eax,DWORD [ecx*4+esi]
mov ebp,edx
mul edi
add eax,ebp
lea ecx,[1+ecx]
adc edx,0
lea ebp,[eax*2+ebx]
shr eax,31
cmp ecx,DWORD [esp]
mov ebx,eax
mov DWORD [28+ecx*4+esp],ebp
jl NEAR L$012sqr
mov eax,DWORD [ecx*4+esi]
mov ebp,edx
mul edi
add eax,ebp
mov edi,DWORD [20+esp]
adc edx,0
mov esi,DWORD [16+esp]
lea ebp,[eax*2+ebx]
imul edi,DWORD [32+esp]
shr eax,31
mov DWORD [32+ecx*4+esp],ebp
lea ebp,[edx*2+eax]
mov eax,DWORD [esi]
shr edx,31
mov DWORD [36+ecx*4+esp],ebp
mov DWORD [40+ecx*4+esp],edx
mul edi
add eax,DWORD [32+esp]
mov ebx,ecx
adc edx,0
mov eax,DWORD [4+esi]
mov ecx,1
align 16
L$0133rdmadd:
mov ebp,edx
mul edi
add ebp,DWORD [32+ecx*4+esp]
adc edx,0
add ebp,eax
mov eax,DWORD [4+ecx*4+esi]
adc edx,0
mov DWORD [28+ecx*4+esp],ebp
mov ebp,edx
mul edi
add ebp,DWORD [36+ecx*4+esp]
lea ecx,[2+ecx]
adc edx,0
add ebp,eax
mov eax,DWORD [ecx*4+esi]
adc edx,0
cmp ecx,ebx
mov DWORD [24+ecx*4+esp],ebp
jl NEAR L$0133rdmadd
mov ebp,edx
mul edi
add ebp,DWORD [32+ebx*4+esp]
adc edx,0
add ebp,eax
adc edx,0
mov DWORD [28+ebx*4+esp],ebp
mov ecx,DWORD [12+esp]
xor eax,eax
mov esi,DWORD [8+esp]
add edx,DWORD [36+ebx*4+esp]
adc eax,DWORD [40+ebx*4+esp]
mov DWORD [32+ebx*4+esp],edx
cmp ecx,ebx
mov DWORD [36+ebx*4+esp],eax
je NEAR L$007common_tail
mov edi,DWORD [4+ecx*4+esi]
lea ecx,[1+ecx]
mov eax,edi
mov DWORD [12+esp],ecx
mul edi
add eax,DWORD [32+ecx*4+esp]
adc edx,0
mov DWORD [32+ecx*4+esp],eax
xor ebp,ebp
cmp ecx,ebx
lea ecx,[1+ecx]
je NEAR L$014sqrlast
mov ebx,edx
shr edx,1
and ebx,1
align 16
L$015sqradd:
mov eax,DWORD [ecx*4+esi]
mov ebp,edx
mul edi
add eax,ebp
lea ebp,[eax*1+eax]
adc edx,0
shr eax,31
add ebp,DWORD [32+ecx*4+esp]
lea ecx,[1+ecx]
adc eax,0
add ebp,ebx
adc eax,0
cmp ecx,DWORD [esp]
mov DWORD [28+ecx*4+esp],ebp
mov ebx,eax
jle NEAR L$015sqradd
mov ebp,edx
add edx,edx
shr ebp,31
add edx,ebx
adc ebp,0
L$014sqrlast:
mov edi,DWORD [20+esp]
mov esi,DWORD [16+esp]
imul edi,DWORD [32+esp]
add edx,DWORD [32+ecx*4+esp]
mov eax,DWORD [esi]
adc ebp,0
mov DWORD [32+ecx*4+esp],edx
mov DWORD [36+ecx*4+esp],ebp
mul edi
add eax,DWORD [32+esp]
lea ebx,[ecx-1]
adc edx,0
mov ecx,1
mov eax,DWORD [4+esi]
jmp NEAR L$0133rdmadd
align 16
L$007common_tail:
mov ebp,DWORD [16+esp]
mov edi,DWORD [4+esp]
lea esi,[32+esp]
mov eax,DWORD [esi]
mov ecx,ebx
xor edx,edx
align 16
L$016sub:
sbb eax,DWORD [edx*4+ebp]
mov DWORD [edx*4+edi],eax
dec ecx
mov eax,DWORD [4+edx*4+esi]
lea edx,[1+edx]
jge NEAR L$016sub
sbb eax,0
mov edx,-1
xor edx,eax
jmp NEAR L$017copy
align 16
L$017copy:
mov esi,DWORD [32+ebx*4+esp]
mov ebp,DWORD [ebx*4+edi]
mov DWORD [32+ebx*4+esp],ecx
and esi,eax
and ebp,edx
or ebp,esi
mov DWORD [ebx*4+edi],ebp
dec ebx
jge NEAR L$017copy
mov esp,DWORD [24+esp]
mov eax,1
L$000just_leave:
pop edi
pop esi
pop ebx
pop ebp
ret
db 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
db 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
db 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
db 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
db 111,114,103,62,0
segment .bss
common _OPENSSL_ia32cap_P 16
%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
;extern _OPENSSL_ia32cap_P
global _bn_mul_mont
align 16
_bn_mul_mont:
L$_bn_mul_mont_begin:
push ebp
push ebx
push esi
push edi
xor eax,eax
mov edi,DWORD [40+esp]
cmp edi,4
jl NEAR L$000just_leave
lea esi,[20+esp]
lea edx,[24+esp]
add edi,2
neg edi
lea ebp,[edi*4+esp-32]
neg edi
mov eax,ebp
sub eax,edx
and eax,2047
sub ebp,eax
xor edx,ebp
and edx,2048
xor edx,2048
sub ebp,edx
and ebp,-64
mov eax,esp
sub eax,ebp
and eax,-4096
mov edx,esp
lea esp,[eax*1+ebp]
mov eax,DWORD [esp]
cmp esp,ebp
ja NEAR L$001page_walk
jmp NEAR L$002page_walk_done
align 16
L$001page_walk:
lea esp,[esp-4096]
mov eax,DWORD [esp]
cmp esp,ebp
ja NEAR L$001page_walk
L$002page_walk_done:
mov eax,DWORD [esi]
mov ebx,DWORD [4+esi]
mov ecx,DWORD [8+esi]
mov ebp,DWORD [12+esi]
mov esi,DWORD [16+esi]
mov esi,DWORD [esi]
mov DWORD [4+esp],eax
mov DWORD [8+esp],ebx
mov DWORD [12+esp],ecx
mov DWORD [16+esp],ebp
mov DWORD [20+esp],esi
lea ebx,[edi-3]
mov DWORD [24+esp],edx
lea eax,[_OPENSSL_ia32cap_P]
bt DWORD [eax],26
jnc NEAR L$003non_sse2
mov eax,-1
movd mm7,eax
mov esi,DWORD [8+esp]
mov edi,DWORD [12+esp]
mov ebp,DWORD [16+esp]
xor edx,edx
xor ecx,ecx
movd mm4,DWORD [edi]
movd mm5,DWORD [esi]
movd mm3,DWORD [ebp]
pmuludq mm5,mm4
movq mm2,mm5
movq mm0,mm5
pand mm0,mm7
pmuludq mm5,[20+esp]
pmuludq mm3,mm5
paddq mm3,mm0
movd mm1,DWORD [4+ebp]
movd mm0,DWORD [4+esi]
psrlq mm2,32
psrlq mm3,32
inc ecx
align 16
L$0041st:
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
pand mm0,mm7
movd mm1,DWORD [4+ecx*4+ebp]
paddq mm3,mm0
movd mm0,DWORD [4+ecx*4+esi]
psrlq mm2,32
movd DWORD [28+ecx*4+esp],mm3
psrlq mm3,32
lea ecx,[1+ecx]
cmp ecx,ebx
jl NEAR L$0041st
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
pand mm0,mm7
paddq mm3,mm0
movd DWORD [28+ecx*4+esp],mm3
psrlq mm2,32
psrlq mm3,32
paddq mm3,mm2
movq [32+ebx*4+esp],mm3
inc edx
L$005outer:
xor ecx,ecx
movd mm4,DWORD [edx*4+edi]
movd mm5,DWORD [esi]
movd mm6,DWORD [32+esp]
movd mm3,DWORD [ebp]
pmuludq mm5,mm4
paddq mm5,mm6
movq mm0,mm5
movq mm2,mm5
pand mm0,mm7
pmuludq mm5,[20+esp]
pmuludq mm3,mm5
paddq mm3,mm0
movd mm6,DWORD [36+esp]
movd mm1,DWORD [4+ebp]
movd mm0,DWORD [4+esi]
psrlq mm2,32
psrlq mm3,32
paddq mm2,mm6
inc ecx
dec ebx
L$006inner:
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
movd mm6,DWORD [36+ecx*4+esp]
pand mm0,mm7
movd mm1,DWORD [4+ecx*4+ebp]
paddq mm3,mm0
movd mm0,DWORD [4+ecx*4+esi]
psrlq mm2,32
movd DWORD [28+ecx*4+esp],mm3
psrlq mm3,32
paddq mm2,mm6
dec ebx
lea ecx,[1+ecx]
jnz NEAR L$006inner
mov ebx,ecx
pmuludq mm0,mm4
pmuludq mm1,mm5
paddq mm2,mm0
paddq mm3,mm1
movq mm0,mm2
pand mm0,mm7
paddq mm3,mm0
movd DWORD [28+ecx*4+esp],mm3
psrlq mm2,32
psrlq mm3,32
movd mm6,DWORD [36+ebx*4+esp]
paddq mm3,mm2
paddq mm3,mm6
movq [32+ebx*4+esp],mm3
lea edx,[1+edx]
cmp edx,ebx
jle NEAR L$005outer
emms
jmp NEAR L$007common_tail
align 16
L$003non_sse2:
mov esi,DWORD [8+esp]
lea ebp,[1+ebx]
mov edi,DWORD [12+esp]
xor ecx,ecx
mov edx,esi
and ebp,1
sub edx,edi
lea eax,[4+ebx*4+edi]
or ebp,edx
mov edi,DWORD [edi]
jz NEAR L$008bn_sqr_mont
mov DWORD [28+esp],eax
mov eax,DWORD [esi]
xor edx,edx
align 16
L$009mull:
mov ebp,edx
mul edi
add ebp,eax
lea ecx,[1+ecx]
adc edx,0
mov eax,DWORD [ecx*4+esi]
cmp ecx,ebx
mov DWORD [28+ecx*4+esp],ebp
jl NEAR L$009mull
mov ebp,edx
mul edi
mov edi,DWORD [20+esp]
add eax,ebp
mov esi,DWORD [16+esp]
adc edx,0
imul edi,DWORD [32+esp]
mov DWORD [32+ebx*4+esp],eax
xor ecx,ecx
mov DWORD [36+ebx*4+esp],edx
mov DWORD [40+ebx*4+esp],ecx
mov eax,DWORD [esi]
mul edi
add eax,DWORD [32+esp]
mov eax,DWORD [4+esi]
adc edx,0
inc ecx
jmp NEAR L$0102ndmadd
align 16
L$0111stmadd:
mov ebp,edx
mul edi
add ebp,DWORD [32+ecx*4+esp]
lea ecx,[1+ecx]
adc edx,0
add ebp,eax
mov eax,DWORD [ecx*4+esi]
adc edx,0
cmp ecx,ebx
mov DWORD [28+ecx*4+esp],ebp
jl NEAR L$0111stmadd
mov ebp,edx
mul edi
add eax,DWORD [32+ebx*4+esp]
mov edi,DWORD [20+esp]
adc edx,0
mov esi,DWORD [16+esp]
add ebp,eax
adc edx,0
imul edi,DWORD [32+esp]
xor ecx,ecx
add edx,DWORD [36+ebx*4+esp]
mov DWORD [32+ebx*4+esp],ebp
adc ecx,0
mov eax,DWORD [esi]
mov DWORD [36+ebx*4+esp],edx
mov DWORD [40+ebx*4+esp],ecx
mul edi
add eax,DWORD [32+esp]
mov eax,DWORD [4+esi]
adc edx,0
mov ecx,1
align 16
L$0102ndmadd:
mov ebp,edx
mul edi
add ebp,DWORD [32+ecx*4+esp]
lea ecx,[1+ecx]
adc edx,0
add ebp,eax
mov eax,DWORD [ecx*4+esi]
adc edx,0
cmp ecx,ebx
mov DWORD [24+ecx*4+esp],ebp
jl NEAR L$0102ndmadd
mov ebp,edx
mul edi
add ebp,DWORD [32+ebx*4+esp]
adc edx,0
add ebp,eax
adc edx,0
mov DWORD [28+ebx*4+esp],ebp
xor eax,eax
mov ecx,DWORD [12+esp]
add edx,DWORD [36+ebx*4+esp]
adc eax,DWORD [40+ebx*4+esp]
lea ecx,[4+ecx]
mov DWORD [32+ebx*4+esp],edx
cmp ecx,DWORD [28+esp]
mov DWORD [36+ebx*4+esp],eax
je NEAR L$007common_tail
mov edi,DWORD [ecx]
mov esi,DWORD [8+esp]
mov DWORD [12+esp],ecx
xor ecx,ecx
xor edx,edx
mov eax,DWORD [esi]
jmp NEAR L$0111stmadd
align 16
L$008bn_sqr_mont:
mov DWORD [esp],ebx
mov DWORD [12+esp],ecx
mov eax,edi
mul edi
mov DWORD [32+esp],eax
mov ebx,edx
shr edx,1
and ebx,1
inc ecx
align 16
L$012sqr:
mov eax,DWORD [ecx*4+esi]
mov ebp,edx
mul edi
add eax,ebp
lea ecx,[1+ecx]
adc edx,0
lea ebp,[eax*2+ebx]
shr eax,31
cmp ecx,DWORD [esp]
mov ebx,eax
mov DWORD [28+ecx*4+esp],ebp
jl NEAR L$012sqr
mov eax,DWORD [ecx*4+esi]
mov ebp,edx
mul edi
add eax,ebp
mov edi,DWORD [20+esp]
adc edx,0
mov esi,DWORD [16+esp]
lea ebp,[eax*2+ebx]
imul edi,DWORD [32+esp]
shr eax,31
mov DWORD [32+ecx*4+esp],ebp
lea ebp,[edx*2+eax]
mov eax,DWORD [esi]
shr edx,31
mov DWORD [36+ecx*4+esp],ebp
mov DWORD [40+ecx*4+esp],edx
mul edi
add eax,DWORD [32+esp]
mov ebx,ecx
adc edx,0
mov eax,DWORD [4+esi]
mov ecx,1
align 16
L$0133rdmadd:
mov ebp,edx
mul edi
add ebp,DWORD [32+ecx*4+esp]
adc edx,0
add ebp,eax
mov eax,DWORD [4+ecx*4+esi]
adc edx,0
mov DWORD [28+ecx*4+esp],ebp
mov ebp,edx
mul edi
add ebp,DWORD [36+ecx*4+esp]
lea ecx,[2+ecx]
adc edx,0
add ebp,eax
mov eax,DWORD [ecx*4+esi]
adc edx,0
cmp ecx,ebx
mov DWORD [24+ecx*4+esp],ebp
jl NEAR L$0133rdmadd
mov ebp,edx
mul edi
add ebp,DWORD [32+ebx*4+esp]
adc edx,0
add ebp,eax
adc edx,0
mov DWORD [28+ebx*4+esp],ebp
mov ecx,DWORD [12+esp]
xor eax,eax
mov esi,DWORD [8+esp]
add edx,DWORD [36+ebx*4+esp]
adc eax,DWORD [40+ebx*4+esp]
mov DWORD [32+ebx*4+esp],edx
cmp ecx,ebx
mov DWORD [36+ebx*4+esp],eax
je NEAR L$007common_tail
mov edi,DWORD [4+ecx*4+esi]
lea ecx,[1+ecx]
mov eax,edi
mov DWORD [12+esp],ecx
mul edi
add eax,DWORD [32+ecx*4+esp]
adc edx,0
mov DWORD [32+ecx*4+esp],eax
xor ebp,ebp
cmp ecx,ebx
lea ecx,[1+ecx]
je NEAR L$014sqrlast
mov ebx,edx
shr edx,1
and ebx,1
align 16
L$015sqradd:
mov eax,DWORD [ecx*4+esi]
mov ebp,edx
mul edi
add eax,ebp
lea ebp,[eax*1+eax]
adc edx,0
shr eax,31
add ebp,DWORD [32+ecx*4+esp]
lea ecx,[1+ecx]
adc eax,0
add ebp,ebx
adc eax,0
cmp ecx,DWORD [esp]
mov DWORD [28+ecx*4+esp],ebp
mov ebx,eax
jle NEAR L$015sqradd
mov ebp,edx
add edx,edx
shr ebp,31
add edx,ebx
adc ebp,0
L$014sqrlast:
mov edi,DWORD [20+esp]
mov esi,DWORD [16+esp]
imul edi,DWORD [32+esp]
add edx,DWORD [32+ecx*4+esp]
mov eax,DWORD [esi]
adc ebp,0
mov DWORD [32+ecx*4+esp],edx
mov DWORD [36+ecx*4+esp],ebp
mul edi
add eax,DWORD [32+esp]
lea ebx,[ecx-1]
adc edx,0
mov ecx,1
mov eax,DWORD [4+esi]
jmp NEAR L$0133rdmadd
align 16
L$007common_tail:
mov ebp,DWORD [16+esp]
mov edi,DWORD [4+esp]
lea esi,[32+esp]
mov eax,DWORD [esi]
mov ecx,ebx
xor edx,edx
align 16
L$016sub:
sbb eax,DWORD [edx*4+ebp]
mov DWORD [edx*4+edi],eax
dec ecx
mov eax,DWORD [4+edx*4+esi]
lea edx,[1+edx]
jge NEAR L$016sub
sbb eax,0
mov edx,-1
xor edx,eax
jmp NEAR L$017copy
align 16
L$017copy:
mov esi,DWORD [32+ebx*4+esp]
mov ebp,DWORD [ebx*4+edi]
mov DWORD [32+ebx*4+esp],ecx
and esi,eax
and ebp,edx
or ebp,esi
mov DWORD [ebx*4+edi],ebp
dec ebx
jge NEAR L$017copy
mov esp,DWORD [24+esp]
mov eax,1
L$000just_leave:
pop edi
pop esi
pop ebx
pop ebp
ret
db 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
db 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
db 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
db 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
db 111,114,103,62,0
segment .bss
common _OPENSSL_ia32cap_P 16

View File

@@ -1,349 +1,349 @@
%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 _OPENSSL_ia32_cpuid
align 16
_OPENSSL_ia32_cpuid:
L$_OPENSSL_ia32_cpuid_begin:
push ebp
push ebx
push esi
push edi
xor edx,edx
pushfd
pop eax
mov ecx,eax
xor eax,2097152
push eax
popfd
pushfd
pop eax
xor ecx,eax
xor eax,eax
mov esi,DWORD [20+esp]
mov DWORD [8+esi],eax
bt ecx,21
jnc NEAR L$000nocpuid
cpuid
mov edi,eax
xor eax,eax
cmp ebx,1970169159
setne al
mov ebp,eax
cmp edx,1231384169
setne al
or ebp,eax
cmp ecx,1818588270
setne al
or ebp,eax
jz NEAR L$001intel
cmp ebx,1752462657
setne al
mov esi,eax
cmp edx,1769238117
setne al
or esi,eax
cmp ecx,1145913699
setne al
or esi,eax
jnz NEAR L$001intel
mov eax,2147483648
cpuid
cmp eax,2147483649
jb NEAR L$001intel
mov esi,eax
mov eax,2147483649
cpuid
or ebp,ecx
and ebp,2049
cmp esi,2147483656
jb NEAR L$001intel
mov eax,2147483656
cpuid
movzx esi,cl
inc esi
mov eax,1
xor ecx,ecx
cpuid
bt edx,28
jnc NEAR L$002generic
shr ebx,16
and ebx,255
cmp ebx,esi
ja NEAR L$002generic
and edx,4026531839
jmp NEAR L$002generic
L$001intel:
cmp edi,4
mov esi,-1
jb NEAR L$003nocacheinfo
mov eax,4
mov ecx,0
cpuid
mov esi,eax
shr esi,14
and esi,4095
L$003nocacheinfo:
mov eax,1
xor ecx,ecx
cpuid
and edx,3220176895
cmp ebp,0
jne NEAR L$004notintel
or edx,1073741824
and ah,15
cmp ah,15
jne NEAR L$004notintel
or edx,1048576
L$004notintel:
bt edx,28
jnc NEAR L$002generic
and edx,4026531839
cmp esi,0
je NEAR L$002generic
or edx,268435456
shr ebx,16
cmp bl,1
ja NEAR L$002generic
and edx,4026531839
L$002generic:
and ebp,2048
and ecx,4294965247
mov esi,edx
or ebp,ecx
cmp edi,7
mov edi,DWORD [20+esp]
jb NEAR L$005no_extended_info
mov eax,7
xor ecx,ecx
cpuid
mov DWORD [8+edi],ebx
L$005no_extended_info:
bt ebp,27
jnc NEAR L$006clear_avx
xor ecx,ecx
db 15,1,208
and eax,6
cmp eax,6
je NEAR L$007done
cmp eax,2
je NEAR L$006clear_avx
L$008clear_xmm:
and ebp,4261412861
and esi,4278190079
L$006clear_avx:
and ebp,4026525695
and DWORD [8+edi],4294967263
L$007done:
mov eax,esi
mov edx,ebp
L$000nocpuid:
pop edi
pop esi
pop ebx
pop ebp
ret
;extern _OPENSSL_ia32cap_P
global _OPENSSL_rdtsc
align 16
_OPENSSL_rdtsc:
L$_OPENSSL_rdtsc_begin:
xor eax,eax
xor edx,edx
lea ecx,[_OPENSSL_ia32cap_P]
bt DWORD [ecx],4
jnc NEAR L$009notsc
rdtsc
L$009notsc:
ret
global _OPENSSL_instrument_halt
align 16
_OPENSSL_instrument_halt:
L$_OPENSSL_instrument_halt_begin:
lea ecx,[_OPENSSL_ia32cap_P]
bt DWORD [ecx],4
jnc NEAR L$010nohalt
dd 2421723150
and eax,3
jnz NEAR L$010nohalt
pushfd
pop eax
bt eax,9
jnc NEAR L$010nohalt
rdtsc
push edx
push eax
hlt
rdtsc
sub eax,DWORD [esp]
sbb edx,DWORD [4+esp]
add esp,8
ret
L$010nohalt:
xor eax,eax
xor edx,edx
ret
global _OPENSSL_far_spin
align 16
_OPENSSL_far_spin:
L$_OPENSSL_far_spin_begin:
pushfd
pop eax
bt eax,9
jnc NEAR L$011nospin
mov eax,DWORD [4+esp]
mov ecx,DWORD [8+esp]
dd 2430111262
xor eax,eax
mov edx,DWORD [ecx]
jmp NEAR L$012spin
align 16
L$012spin:
inc eax
cmp edx,DWORD [ecx]
je NEAR L$012spin
dd 529567888
ret
L$011nospin:
xor eax,eax
xor edx,edx
ret
global _OPENSSL_wipe_cpu
align 16
_OPENSSL_wipe_cpu:
L$_OPENSSL_wipe_cpu_begin:
xor eax,eax
xor edx,edx
lea ecx,[_OPENSSL_ia32cap_P]
mov ecx,DWORD [ecx]
bt DWORD [ecx],1
jnc NEAR L$013no_x87
and ecx,83886080
cmp ecx,83886080
jne NEAR L$014no_sse2
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
pxor xmm6,xmm6
pxor xmm7,xmm7
L$014no_sse2:
dd 4007259865,4007259865,4007259865,4007259865,2430851995
L$013no_x87:
lea eax,[4+esp]
ret
global _OPENSSL_atomic_add
align 16
_OPENSSL_atomic_add:
L$_OPENSSL_atomic_add_begin:
mov edx,DWORD [4+esp]
mov ecx,DWORD [8+esp]
push ebx
nop
mov eax,DWORD [edx]
L$015spin:
lea ebx,[ecx*1+eax]
nop
dd 447811568
jne NEAR L$015spin
mov eax,ebx
pop ebx
ret
global _OPENSSL_indirect_call
align 16
_OPENSSL_indirect_call:
L$_OPENSSL_indirect_call_begin:
push ebp
mov ebp,esp
sub esp,28
mov ecx,DWORD [12+ebp]
mov DWORD [esp],ecx
mov edx,DWORD [16+ebp]
mov DWORD [4+esp],edx
mov eax,DWORD [20+ebp]
mov DWORD [8+esp],eax
mov eax,DWORD [24+ebp]
mov DWORD [12+esp],eax
mov eax,DWORD [28+ebp]
mov DWORD [16+esp],eax
mov eax,DWORD [32+ebp]
mov DWORD [20+esp],eax
mov eax,DWORD [36+ebp]
mov DWORD [24+esp],eax
call DWORD [8+ebp]
mov esp,ebp
pop ebp
ret
global _OPENSSL_cleanse
align 16
_OPENSSL_cleanse:
L$_OPENSSL_cleanse_begin:
mov edx,DWORD [4+esp]
mov ecx,DWORD [8+esp]
xor eax,eax
cmp ecx,7
jae NEAR L$016lot
cmp ecx,0
je NEAR L$017ret
L$018little:
mov BYTE [edx],al
sub ecx,1
lea edx,[1+edx]
jnz NEAR L$018little
L$017ret:
ret
align 16
L$016lot:
test edx,3
jz NEAR L$019aligned
mov BYTE [edx],al
lea ecx,[ecx-1]
lea edx,[1+edx]
jmp NEAR L$016lot
L$019aligned:
mov DWORD [edx],eax
lea ecx,[ecx-4]
test ecx,-4
lea edx,[4+edx]
jnz NEAR L$019aligned
cmp ecx,0
jne NEAR L$018little
ret
global _OPENSSL_ia32_rdrand
align 16
_OPENSSL_ia32_rdrand:
L$_OPENSSL_ia32_rdrand_begin:
mov ecx,8
L$020loop:
db 15,199,240
jc NEAR L$021break
loop L$020loop
L$021break:
cmp eax,0
cmove eax,ecx
ret
global _OPENSSL_ia32_rdseed
align 16
_OPENSSL_ia32_rdseed:
L$_OPENSSL_ia32_rdseed_begin:
mov ecx,8
L$022loop:
db 15,199,248
jc NEAR L$023break
loop L$022loop
L$023break:
cmp eax,0
cmove eax,ecx
ret
segment .bss
common _OPENSSL_ia32cap_P 16
segment .CRT$XCU data align=4
extern _OPENSSL_cpuid_setup
dd _OPENSSL_cpuid_setup
%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 _OPENSSL_ia32_cpuid
align 16
_OPENSSL_ia32_cpuid:
L$_OPENSSL_ia32_cpuid_begin:
push ebp
push ebx
push esi
push edi
xor edx,edx
pushfd
pop eax
mov ecx,eax
xor eax,2097152
push eax
popfd
pushfd
pop eax
xor ecx,eax
xor eax,eax
mov esi,DWORD [20+esp]
mov DWORD [8+esi],eax
bt ecx,21
jnc NEAR L$000nocpuid
cpuid
mov edi,eax
xor eax,eax
cmp ebx,1970169159
setne al
mov ebp,eax
cmp edx,1231384169
setne al
or ebp,eax
cmp ecx,1818588270
setne al
or ebp,eax
jz NEAR L$001intel
cmp ebx,1752462657
setne al
mov esi,eax
cmp edx,1769238117
setne al
or esi,eax
cmp ecx,1145913699
setne al
or esi,eax
jnz NEAR L$001intel
mov eax,2147483648
cpuid
cmp eax,2147483649
jb NEAR L$001intel
mov esi,eax
mov eax,2147483649
cpuid
or ebp,ecx
and ebp,2049
cmp esi,2147483656
jb NEAR L$001intel
mov eax,2147483656
cpuid
movzx esi,cl
inc esi
mov eax,1
xor ecx,ecx
cpuid
bt edx,28
jnc NEAR L$002generic
shr ebx,16
and ebx,255
cmp ebx,esi
ja NEAR L$002generic
and edx,4026531839
jmp NEAR L$002generic
L$001intel:
cmp edi,4
mov esi,-1
jb NEAR L$003nocacheinfo
mov eax,4
mov ecx,0
cpuid
mov esi,eax
shr esi,14
and esi,4095
L$003nocacheinfo:
mov eax,1
xor ecx,ecx
cpuid
and edx,3220176895
cmp ebp,0
jne NEAR L$004notintel
or edx,1073741824
and ah,15
cmp ah,15
jne NEAR L$004notintel
or edx,1048576
L$004notintel:
bt edx,28
jnc NEAR L$002generic
and edx,4026531839
cmp esi,0
je NEAR L$002generic
or edx,268435456
shr ebx,16
cmp bl,1
ja NEAR L$002generic
and edx,4026531839
L$002generic:
and ebp,2048
and ecx,4294965247
mov esi,edx
or ebp,ecx
cmp edi,7
mov edi,DWORD [20+esp]
jb NEAR L$005no_extended_info
mov eax,7
xor ecx,ecx
cpuid
mov DWORD [8+edi],ebx
L$005no_extended_info:
bt ebp,27
jnc NEAR L$006clear_avx
xor ecx,ecx
db 15,1,208
and eax,6
cmp eax,6
je NEAR L$007done
cmp eax,2
je NEAR L$006clear_avx
L$008clear_xmm:
and ebp,4261412861
and esi,4278190079
L$006clear_avx:
and ebp,4026525695
and DWORD [8+edi],4294967263
L$007done:
mov eax,esi
mov edx,ebp
L$000nocpuid:
pop edi
pop esi
pop ebx
pop ebp
ret
;extern _OPENSSL_ia32cap_P
global _OPENSSL_rdtsc
align 16
_OPENSSL_rdtsc:
L$_OPENSSL_rdtsc_begin:
xor eax,eax
xor edx,edx
lea ecx,[_OPENSSL_ia32cap_P]
bt DWORD [ecx],4
jnc NEAR L$009notsc
rdtsc
L$009notsc:
ret
global _OPENSSL_instrument_halt
align 16
_OPENSSL_instrument_halt:
L$_OPENSSL_instrument_halt_begin:
lea ecx,[_OPENSSL_ia32cap_P]
bt DWORD [ecx],4
jnc NEAR L$010nohalt
dd 2421723150
and eax,3
jnz NEAR L$010nohalt
pushfd
pop eax
bt eax,9
jnc NEAR L$010nohalt
rdtsc
push edx
push eax
hlt
rdtsc
sub eax,DWORD [esp]
sbb edx,DWORD [4+esp]
add esp,8
ret
L$010nohalt:
xor eax,eax
xor edx,edx
ret
global _OPENSSL_far_spin
align 16
_OPENSSL_far_spin:
L$_OPENSSL_far_spin_begin:
pushfd
pop eax
bt eax,9
jnc NEAR L$011nospin
mov eax,DWORD [4+esp]
mov ecx,DWORD [8+esp]
dd 2430111262
xor eax,eax
mov edx,DWORD [ecx]
jmp NEAR L$012spin
align 16
L$012spin:
inc eax
cmp edx,DWORD [ecx]
je NEAR L$012spin
dd 529567888
ret
L$011nospin:
xor eax,eax
xor edx,edx
ret
global _OPENSSL_wipe_cpu
align 16
_OPENSSL_wipe_cpu:
L$_OPENSSL_wipe_cpu_begin:
xor eax,eax
xor edx,edx
lea ecx,[_OPENSSL_ia32cap_P]
mov ecx,DWORD [ecx]
bt DWORD [ecx],1
jnc NEAR L$013no_x87
and ecx,83886080
cmp ecx,83886080
jne NEAR L$014no_sse2
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
pxor xmm6,xmm6
pxor xmm7,xmm7
L$014no_sse2:
dd 4007259865,4007259865,4007259865,4007259865,2430851995
L$013no_x87:
lea eax,[4+esp]
ret
global _OPENSSL_atomic_add
align 16
_OPENSSL_atomic_add:
L$_OPENSSL_atomic_add_begin:
mov edx,DWORD [4+esp]
mov ecx,DWORD [8+esp]
push ebx
nop
mov eax,DWORD [edx]
L$015spin:
lea ebx,[ecx*1+eax]
nop
dd 447811568
jne NEAR L$015spin
mov eax,ebx
pop ebx
ret
global _OPENSSL_indirect_call
align 16
_OPENSSL_indirect_call:
L$_OPENSSL_indirect_call_begin:
push ebp
mov ebp,esp
sub esp,28
mov ecx,DWORD [12+ebp]
mov DWORD [esp],ecx
mov edx,DWORD [16+ebp]
mov DWORD [4+esp],edx
mov eax,DWORD [20+ebp]
mov DWORD [8+esp],eax
mov eax,DWORD [24+ebp]
mov DWORD [12+esp],eax
mov eax,DWORD [28+ebp]
mov DWORD [16+esp],eax
mov eax,DWORD [32+ebp]
mov DWORD [20+esp],eax
mov eax,DWORD [36+ebp]
mov DWORD [24+esp],eax
call DWORD [8+ebp]
mov esp,ebp
pop ebp
ret
global _OPENSSL_cleanse
align 16
_OPENSSL_cleanse:
L$_OPENSSL_cleanse_begin:
mov edx,DWORD [4+esp]
mov ecx,DWORD [8+esp]
xor eax,eax
cmp ecx,7
jae NEAR L$016lot
cmp ecx,0
je NEAR L$017ret
L$018little:
mov BYTE [edx],al
sub ecx,1
lea edx,[1+edx]
jnz NEAR L$018little
L$017ret:
ret
align 16
L$016lot:
test edx,3
jz NEAR L$019aligned
mov BYTE [edx],al
lea ecx,[ecx-1]
lea edx,[1+edx]
jmp NEAR L$016lot
L$019aligned:
mov DWORD [edx],eax
lea ecx,[ecx-4]
test ecx,-4
lea edx,[4+edx]
jnz NEAR L$019aligned
cmp ecx,0
jne NEAR L$018little
ret
global _OPENSSL_ia32_rdrand
align 16
_OPENSSL_ia32_rdrand:
L$_OPENSSL_ia32_rdrand_begin:
mov ecx,8
L$020loop:
db 15,199,240
jc NEAR L$021break
loop L$020loop
L$021break:
cmp eax,0
cmove eax,ecx
ret
global _OPENSSL_ia32_rdseed
align 16
_OPENSSL_ia32_rdseed:
L$_OPENSSL_ia32_rdseed_begin:
mov ecx,8
L$022loop:
db 15,199,248
jc NEAR L$023break
loop L$022loop
L$023break:
cmp eax,0
cmove eax,ecx
ret
segment .bss
common _OPENSSL_ia32cap_P 16
segment .CRT$XCU data align=4
extern _OPENSSL_cpuid_setup
dd _OPENSSL_cpuid_setup