You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1529 lines
25 KiB

TITLE ../openssl/crypto/bn/asm/bn-586.asm
IF @Version LT 800
ECHO MASM version 8.00 or later is strongly recommended.
ENDIF
.686
.XMM
IF @Version LT 800
XMMWORD STRUCT 16
DQ 2 dup (?)
XMMWORD ENDS
ENDIF
.MODEL FLAT
OPTION DOTNAME
IF @Version LT 800
.text$ SEGMENT PAGE 'CODE'
ELSE
.text$ SEGMENT ALIGN(64) 'CODE'
ENDIF
;EXTERN _OPENSSL_ia32cap_P:NEAR
ALIGN 16
_bn_mul_add_words PROC PUBLIC
$L_bn_mul_add_words_begin::
lea eax,DWORD PTR _OPENSSL_ia32cap_P
bt DWORD PTR [eax],26
jnc $L000maw_non_sse2
mov eax,DWORD PTR 4[esp]
mov edx,DWORD PTR 8[esp]
mov ecx,DWORD PTR 12[esp]
movd mm0,DWORD PTR 16[esp]
pxor mm1,mm1
jmp $L001maw_sse2_entry
ALIGN 16
$L002maw_sse2_unrolled:
movd mm3,DWORD PTR [eax]
paddq mm1,mm3
movd mm2,DWORD PTR [edx]
pmuludq mm2,mm0
movd mm4,DWORD PTR 4[edx]
pmuludq mm4,mm0
movd mm6,DWORD PTR 8[edx]
pmuludq mm6,mm0
movd mm7,DWORD PTR 12[edx]
pmuludq mm7,mm0
paddq mm1,mm2
movd mm3,DWORD PTR 4[eax]
paddq mm3,mm4
movd mm5,DWORD PTR 8[eax]
paddq mm5,mm6
movd mm4,DWORD PTR 12[eax]
paddq mm7,mm4
movd DWORD PTR [eax],mm1
movd mm2,DWORD PTR 16[edx]
pmuludq mm2,mm0
psrlq mm1,32
movd mm4,DWORD PTR 20[edx]
pmuludq mm4,mm0
paddq mm1,mm3
movd mm6,DWORD PTR 24[edx]
pmuludq mm6,mm0
movd DWORD PTR 4[eax],mm1
psrlq mm1,32
movd mm3,DWORD PTR 28[edx]
add edx,32
pmuludq mm3,mm0
paddq mm1,mm5
movd mm5,DWORD PTR 16[eax]
paddq mm2,mm5
movd DWORD PTR 8[eax],mm1
psrlq mm1,32
paddq mm1,mm7
movd mm5,DWORD PTR 20[eax]
paddq mm4,mm5
movd DWORD PTR 12[eax],mm1
psrlq mm1,32
paddq mm1,mm2
movd mm5,DWORD PTR 24[eax]
paddq mm6,mm5
movd DWORD PTR 16[eax],mm1
psrlq mm1,32
paddq mm1,mm4
movd mm5,DWORD PTR 28[eax]
paddq mm3,mm5
movd DWORD PTR 20[eax],mm1
psrlq mm1,32
paddq mm1,mm6
movd DWORD PTR 24[eax],mm1
psrlq mm1,32
paddq mm1,mm3
movd DWORD PTR 28[eax],mm1
lea eax,DWORD PTR 32[eax]
psrlq mm1,32
sub ecx,8
jz $L003maw_sse2_exit
$L001maw_sse2_entry:
test ecx,4294967288
jnz $L002maw_sse2_unrolled
ALIGN 4
$L004maw_sse2_loop:
movd mm2,DWORD PTR [edx]
movd mm3,DWORD PTR [eax]
pmuludq mm2,mm0
lea edx,DWORD PTR 4[edx]
paddq mm1,mm3
paddq mm1,mm2
movd DWORD PTR [eax],mm1
sub ecx,1
psrlq mm1,32
lea eax,DWORD PTR 4[eax]
jnz $L004maw_sse2_loop
$L003maw_sse2_exit:
movd eax,mm1
emms
ret
ALIGN 16
$L000maw_non_sse2:
push ebp
push ebx
push esi
push edi
;
xor esi,esi
mov edi,DWORD PTR 20[esp]
mov ecx,DWORD PTR 28[esp]
mov ebx,DWORD PTR 24[esp]
and ecx,4294967288
mov ebp,DWORD PTR 32[esp]
push ecx
jz $L005maw_finish
ALIGN 16
$L006maw_loop:
; Round 0
mov eax,DWORD PTR [ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR [edi]
adc edx,0
mov DWORD PTR [edi],eax
mov esi,edx
; Round 4
mov eax,DWORD PTR 4[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 4[edi]
adc edx,0
mov DWORD PTR 4[edi],eax
mov esi,edx
; Round 8
mov eax,DWORD PTR 8[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 8[edi]
adc edx,0
mov DWORD PTR 8[edi],eax
mov esi,edx
; Round 12
mov eax,DWORD PTR 12[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 12[edi]
adc edx,0
mov DWORD PTR 12[edi],eax
mov esi,edx
; Round 16
mov eax,DWORD PTR 16[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 16[edi]
adc edx,0
mov DWORD PTR 16[edi],eax
mov esi,edx
; Round 20
mov eax,DWORD PTR 20[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 20[edi]
adc edx,0
mov DWORD PTR 20[edi],eax
mov esi,edx
; Round 24
mov eax,DWORD PTR 24[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 24[edi]
adc edx,0
mov DWORD PTR 24[edi],eax
mov esi,edx
; Round 28
mov eax,DWORD PTR 28[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 28[edi]
adc edx,0
mov DWORD PTR 28[edi],eax
mov esi,edx
;
sub ecx,8
lea ebx,DWORD PTR 32[ebx]
lea edi,DWORD PTR 32[edi]
jnz $L006maw_loop
$L005maw_finish:
mov ecx,DWORD PTR 32[esp]
and ecx,7
jnz $L007maw_finish2
jmp $L008maw_end
$L007maw_finish2:
; Tail Round 0
mov eax,DWORD PTR [ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR [edi]
adc edx,0
dec ecx
mov DWORD PTR [edi],eax
mov esi,edx
jz $L008maw_end
; Tail Round 1
mov eax,DWORD PTR 4[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 4[edi]
adc edx,0
dec ecx
mov DWORD PTR 4[edi],eax
mov esi,edx
jz $L008maw_end
; Tail Round 2
mov eax,DWORD PTR 8[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 8[edi]
adc edx,0
dec ecx
mov DWORD PTR 8[edi],eax
mov esi,edx
jz $L008maw_end
; Tail Round 3
mov eax,DWORD PTR 12[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 12[edi]
adc edx,0
dec ecx
mov DWORD PTR 12[edi],eax
mov esi,edx
jz $L008maw_end
; Tail Round 4
mov eax,DWORD PTR 16[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 16[edi]
adc edx,0
dec ecx
mov DWORD PTR 16[edi],eax
mov esi,edx
jz $L008maw_end
; Tail Round 5
mov eax,DWORD PTR 20[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 20[edi]
adc edx,0
dec ecx
mov DWORD PTR 20[edi],eax
mov esi,edx
jz $L008maw_end
; Tail Round 6
mov eax,DWORD PTR 24[ebx]
mul ebp
add eax,esi
adc edx,0
add eax,DWORD PTR 24[edi]
adc edx,0
mov DWORD PTR 24[edi],eax
mov esi,edx
$L008maw_end:
mov eax,esi
pop ecx
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_mul_add_words ENDP
ALIGN 16
_bn_mul_words PROC PUBLIC
$L_bn_mul_words_begin::
lea eax,DWORD PTR _OPENSSL_ia32cap_P
bt DWORD PTR [eax],26
jnc $L009mw_non_sse2
mov eax,DWORD PTR 4[esp]
mov edx,DWORD PTR 8[esp]
mov ecx,DWORD PTR 12[esp]
movd mm0,DWORD PTR 16[esp]
pxor mm1,mm1
ALIGN 16
$L010mw_sse2_loop:
movd mm2,DWORD PTR [edx]
pmuludq mm2,mm0
lea edx,DWORD PTR 4[edx]
paddq mm1,mm2
movd DWORD PTR [eax],mm1
sub ecx,1
psrlq mm1,32
lea eax,DWORD PTR 4[eax]
jnz $L010mw_sse2_loop
movd eax,mm1
emms
ret
ALIGN 16
$L009mw_non_sse2:
push ebp
push ebx
push esi
push edi
;
xor esi,esi
mov edi,DWORD PTR 20[esp]
mov ebx,DWORD PTR 24[esp]
mov ebp,DWORD PTR 28[esp]
mov ecx,DWORD PTR 32[esp]
and ebp,4294967288
jz $L011mw_finish
$L012mw_loop:
; Round 0
mov eax,DWORD PTR [ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR [edi],eax
mov esi,edx
; Round 4
mov eax,DWORD PTR 4[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 4[edi],eax
mov esi,edx
; Round 8
mov eax,DWORD PTR 8[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 8[edi],eax
mov esi,edx
; Round 12
mov eax,DWORD PTR 12[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 12[edi],eax
mov esi,edx
; Round 16
mov eax,DWORD PTR 16[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 16[edi],eax
mov esi,edx
; Round 20
mov eax,DWORD PTR 20[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 20[edi],eax
mov esi,edx
; Round 24
mov eax,DWORD PTR 24[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 24[edi],eax
mov esi,edx
; Round 28
mov eax,DWORD PTR 28[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 28[edi],eax
mov esi,edx
;
add ebx,32
add edi,32
sub ebp,8
jz $L011mw_finish
jmp $L012mw_loop
$L011mw_finish:
mov ebp,DWORD PTR 28[esp]
and ebp,7
jnz $L013mw_finish2
jmp $L014mw_end
$L013mw_finish2:
; Tail Round 0
mov eax,DWORD PTR [ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR [edi],eax
mov esi,edx
dec ebp
jz $L014mw_end
; Tail Round 1
mov eax,DWORD PTR 4[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 4[edi],eax
mov esi,edx
dec ebp
jz $L014mw_end
; Tail Round 2
mov eax,DWORD PTR 8[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 8[edi],eax
mov esi,edx
dec ebp
jz $L014mw_end
; Tail Round 3
mov eax,DWORD PTR 12[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 12[edi],eax
mov esi,edx
dec ebp
jz $L014mw_end
; Tail Round 4
mov eax,DWORD PTR 16[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 16[edi],eax
mov esi,edx
dec ebp
jz $L014mw_end
; Tail Round 5
mov eax,DWORD PTR 20[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 20[edi],eax
mov esi,edx
dec ebp
jz $L014mw_end
; Tail Round 6
mov eax,DWORD PTR 24[ebx]
mul ecx
add eax,esi
adc edx,0
mov DWORD PTR 24[edi],eax
mov esi,edx
$L014mw_end:
mov eax,esi
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_mul_words ENDP
ALIGN 16
_bn_sqr_words PROC PUBLIC
$L_bn_sqr_words_begin::
lea eax,DWORD PTR _OPENSSL_ia32cap_P
bt DWORD PTR [eax],26
jnc $L015sqr_non_sse2
mov eax,DWORD PTR 4[esp]
mov edx,DWORD PTR 8[esp]
mov ecx,DWORD PTR 12[esp]
ALIGN 16
$L016sqr_sse2_loop:
movd mm0,DWORD PTR [edx]
pmuludq mm0,mm0
lea edx,DWORD PTR 4[edx]
movq QWORD PTR [eax],mm0
sub ecx,1
lea eax,DWORD PTR 8[eax]
jnz $L016sqr_sse2_loop
emms
ret
ALIGN 16
$L015sqr_non_sse2:
push ebp
push ebx
push esi
push edi
;
mov esi,DWORD PTR 20[esp]
mov edi,DWORD PTR 24[esp]
mov ebx,DWORD PTR 28[esp]
and ebx,4294967288
jz $L017sw_finish
$L018sw_loop:
; Round 0
mov eax,DWORD PTR [edi]
mul eax
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],edx
; Round 4
mov eax,DWORD PTR 4[edi]
mul eax
mov DWORD PTR 8[esi],eax
mov DWORD PTR 12[esi],edx
; Round 8
mov eax,DWORD PTR 8[edi]
mul eax
mov DWORD PTR 16[esi],eax
mov DWORD PTR 20[esi],edx
; Round 12
mov eax,DWORD PTR 12[edi]
mul eax
mov DWORD PTR 24[esi],eax
mov DWORD PTR 28[esi],edx
; Round 16
mov eax,DWORD PTR 16[edi]
mul eax
mov DWORD PTR 32[esi],eax
mov DWORD PTR 36[esi],edx
; Round 20
mov eax,DWORD PTR 20[edi]
mul eax
mov DWORD PTR 40[esi],eax
mov DWORD PTR 44[esi],edx
; Round 24
mov eax,DWORD PTR 24[edi]
mul eax
mov DWORD PTR 48[esi],eax
mov DWORD PTR 52[esi],edx
; Round 28
mov eax,DWORD PTR 28[edi]
mul eax
mov DWORD PTR 56[esi],eax
mov DWORD PTR 60[esi],edx
;
add edi,32
add esi,64
sub ebx,8
jnz $L018sw_loop
$L017sw_finish:
mov ebx,DWORD PTR 28[esp]
and ebx,7
jz $L019sw_end
; Tail Round 0
mov eax,DWORD PTR [edi]
mul eax
mov DWORD PTR [esi],eax
dec ebx
mov DWORD PTR 4[esi],edx
jz $L019sw_end
; Tail Round 1
mov eax,DWORD PTR 4[edi]
mul eax
mov DWORD PTR 8[esi],eax
dec ebx
mov DWORD PTR 12[esi],edx
jz $L019sw_end
; Tail Round 2
mov eax,DWORD PTR 8[edi]
mul eax
mov DWORD PTR 16[esi],eax
dec ebx
mov DWORD PTR 20[esi],edx
jz $L019sw_end
; Tail Round 3
mov eax,DWORD PTR 12[edi]
mul eax
mov DWORD PTR 24[esi],eax
dec ebx
mov DWORD PTR 28[esi],edx
jz $L019sw_end
; Tail Round 4
mov eax,DWORD PTR 16[edi]
mul eax
mov DWORD PTR 32[esi],eax
dec ebx
mov DWORD PTR 36[esi],edx
jz $L019sw_end
; Tail Round 5
mov eax,DWORD PTR 20[edi]
mul eax
mov DWORD PTR 40[esi],eax
dec ebx
mov DWORD PTR 44[esi],edx
jz $L019sw_end
; Tail Round 6
mov eax,DWORD PTR 24[edi]
mul eax
mov DWORD PTR 48[esi],eax
mov DWORD PTR 52[esi],edx
$L019sw_end:
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_sqr_words ENDP
ALIGN 16
_bn_div_words PROC PUBLIC
$L_bn_div_words_begin::
mov edx,DWORD PTR 4[esp]
mov eax,DWORD PTR 8[esp]
mov ecx,DWORD PTR 12[esp]
div ecx
ret
_bn_div_words ENDP
ALIGN 16
_bn_add_words PROC PUBLIC
$L_bn_add_words_begin::
push ebp
push ebx
push esi
push edi
;
mov ebx,DWORD PTR 20[esp]
mov esi,DWORD PTR 24[esp]
mov edi,DWORD PTR 28[esp]
mov ebp,DWORD PTR 32[esp]
xor eax,eax
and ebp,4294967288
jz $L020aw_finish
$L021aw_loop:
; Round 0
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
; Round 1
mov ecx,DWORD PTR 4[esi]
mov edx,DWORD PTR 4[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 4[ebx],ecx
; Round 2
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 8[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 8[ebx],ecx
; Round 3
mov ecx,DWORD PTR 12[esi]
mov edx,DWORD PTR 12[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 12[ebx],ecx
; Round 4
mov ecx,DWORD PTR 16[esi]
mov edx,DWORD PTR 16[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 16[ebx],ecx
; Round 5
mov ecx,DWORD PTR 20[esi]
mov edx,DWORD PTR 20[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 20[ebx],ecx
; Round 6
mov ecx,DWORD PTR 24[esi]
mov edx,DWORD PTR 24[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 24[ebx],ecx
; Round 7
mov ecx,DWORD PTR 28[esi]
mov edx,DWORD PTR 28[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 28[ebx],ecx
;
add esi,32
add edi,32
add ebx,32
sub ebp,8
jnz $L021aw_loop
$L020aw_finish:
mov ebp,DWORD PTR 32[esp]
and ebp,7
jz $L022aw_end
; Tail Round 0
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
dec ebp
mov DWORD PTR [ebx],ecx
jz $L022aw_end
; Tail Round 1
mov ecx,DWORD PTR 4[esi]
mov edx,DWORD PTR 4[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 4[ebx],ecx
jz $L022aw_end
; Tail Round 2
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 8[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 8[ebx],ecx
jz $L022aw_end
; Tail Round 3
mov ecx,DWORD PTR 12[esi]
mov edx,DWORD PTR 12[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 12[ebx],ecx
jz $L022aw_end
; Tail Round 4
mov ecx,DWORD PTR 16[esi]
mov edx,DWORD PTR 16[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 16[ebx],ecx
jz $L022aw_end
; Tail Round 5
mov ecx,DWORD PTR 20[esi]
mov edx,DWORD PTR 20[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 20[ebx],ecx
jz $L022aw_end
; Tail Round 6
mov ecx,DWORD PTR 24[esi]
mov edx,DWORD PTR 24[edi]
add ecx,eax
mov eax,0
adc eax,eax
add ecx,edx
adc eax,0
mov DWORD PTR 24[ebx],ecx
$L022aw_end:
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_add_words ENDP
ALIGN 16
_bn_sub_words PROC PUBLIC
$L_bn_sub_words_begin::
push ebp
push ebx
push esi
push edi
;
mov ebx,DWORD PTR 20[esp]
mov esi,DWORD PTR 24[esp]
mov edi,DWORD PTR 28[esp]
mov ebp,DWORD PTR 32[esp]
xor eax,eax
and ebp,4294967288
jz $L023aw_finish
$L024aw_loop:
; Round 0
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
; Round 1
mov ecx,DWORD PTR 4[esi]
mov edx,DWORD PTR 4[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 4[ebx],ecx
; Round 2
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 8[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 8[ebx],ecx
; Round 3
mov ecx,DWORD PTR 12[esi]
mov edx,DWORD PTR 12[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 12[ebx],ecx
; Round 4
mov ecx,DWORD PTR 16[esi]
mov edx,DWORD PTR 16[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 16[ebx],ecx
; Round 5
mov ecx,DWORD PTR 20[esi]
mov edx,DWORD PTR 20[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 20[ebx],ecx
; Round 6
mov ecx,DWORD PTR 24[esi]
mov edx,DWORD PTR 24[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 24[ebx],ecx
; Round 7
mov ecx,DWORD PTR 28[esi]
mov edx,DWORD PTR 28[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 28[ebx],ecx
;
add esi,32
add edi,32
add ebx,32
sub ebp,8
jnz $L024aw_loop
$L023aw_finish:
mov ebp,DWORD PTR 32[esp]
and ebp,7
jz $L025aw_end
; Tail Round 0
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR [ebx],ecx
jz $L025aw_end
; Tail Round 1
mov ecx,DWORD PTR 4[esi]
mov edx,DWORD PTR 4[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 4[ebx],ecx
jz $L025aw_end
; Tail Round 2
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 8[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 8[ebx],ecx
jz $L025aw_end
; Tail Round 3
mov ecx,DWORD PTR 12[esi]
mov edx,DWORD PTR 12[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 12[ebx],ecx
jz $L025aw_end
; Tail Round 4
mov ecx,DWORD PTR 16[esi]
mov edx,DWORD PTR 16[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 16[ebx],ecx
jz $L025aw_end
; Tail Round 5
mov ecx,DWORD PTR 20[esi]
mov edx,DWORD PTR 20[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 20[ebx],ecx
jz $L025aw_end
; Tail Round 6
mov ecx,DWORD PTR 24[esi]
mov edx,DWORD PTR 24[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 24[ebx],ecx
$L025aw_end:
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_sub_words ENDP
ALIGN 16
_bn_sub_part_words PROC PUBLIC
$L_bn_sub_part_words_begin::
push ebp
push ebx
push esi
push edi
;
mov ebx,DWORD PTR 20[esp]
mov esi,DWORD PTR 24[esp]
mov edi,DWORD PTR 28[esp]
mov ebp,DWORD PTR 32[esp]
xor eax,eax
and ebp,4294967288
jz $L026aw_finish
$L027aw_loop:
; Round 0
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
; Round 1
mov ecx,DWORD PTR 4[esi]
mov edx,DWORD PTR 4[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 4[ebx],ecx
; Round 2
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 8[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 8[ebx],ecx
; Round 3
mov ecx,DWORD PTR 12[esi]
mov edx,DWORD PTR 12[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 12[ebx],ecx
; Round 4
mov ecx,DWORD PTR 16[esi]
mov edx,DWORD PTR 16[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 16[ebx],ecx
; Round 5
mov ecx,DWORD PTR 20[esi]
mov edx,DWORD PTR 20[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 20[ebx],ecx
; Round 6
mov ecx,DWORD PTR 24[esi]
mov edx,DWORD PTR 24[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 24[ebx],ecx
; Round 7
mov ecx,DWORD PTR 28[esi]
mov edx,DWORD PTR 28[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 28[ebx],ecx
;
add esi,32
add edi,32
add ebx,32
sub ebp,8
jnz $L027aw_loop
$L026aw_finish:
mov ebp,DWORD PTR 32[esp]
and ebp,7
jz $L028aw_end
; Tail Round 0
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
add esi,4
add edi,4
add ebx,4
dec ebp
jz $L028aw_end
; Tail Round 1
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
add esi,4
add edi,4
add ebx,4
dec ebp
jz $L028aw_end
; Tail Round 2
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
add esi,4
add edi,4
add ebx,4
dec ebp
jz $L028aw_end
; Tail Round 3
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
add esi,4
add edi,4
add ebx,4
dec ebp
jz $L028aw_end
; Tail Round 4
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
add esi,4
add edi,4
add ebx,4
dec ebp
jz $L028aw_end
; Tail Round 5
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
add esi,4
add edi,4
add ebx,4
dec ebp
jz $L028aw_end
; Tail Round 6
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
add esi,4
add edi,4
add ebx,4
$L028aw_end:
cmp DWORD PTR 36[esp],0
je $L029pw_end
mov ebp,DWORD PTR 36[esp]
cmp ebp,0
je $L029pw_end
jge $L030pw_pos
; pw_neg
mov edx,0
sub edx,ebp
mov ebp,edx
and ebp,4294967288
jz $L031pw_neg_finish
$L032pw_neg_loop:
; dl<0 Round 0
mov ecx,0
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR [ebx],ecx
; dl<0 Round 1
mov ecx,0
mov edx,DWORD PTR 4[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 4[ebx],ecx
; dl<0 Round 2
mov ecx,0
mov edx,DWORD PTR 8[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 8[ebx],ecx
; dl<0 Round 3
mov ecx,0
mov edx,DWORD PTR 12[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 12[ebx],ecx
; dl<0 Round 4
mov ecx,0
mov edx,DWORD PTR 16[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 16[ebx],ecx
; dl<0 Round 5
mov ecx,0
mov edx,DWORD PTR 20[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 20[ebx],ecx
; dl<0 Round 6
mov ecx,0
mov edx,DWORD PTR 24[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 24[ebx],ecx
; dl<0 Round 7
mov ecx,0
mov edx,DWORD PTR 28[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 28[ebx],ecx
;
add edi,32
add ebx,32
sub ebp,8
jnz $L032pw_neg_loop
$L031pw_neg_finish:
mov edx,DWORD PTR 36[esp]
mov ebp,0
sub ebp,edx
and ebp,7
jz $L029pw_end
; dl<0 Tail Round 0
mov ecx,0
mov edx,DWORD PTR [edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR [ebx],ecx
jz $L029pw_end
; dl<0 Tail Round 1
mov ecx,0
mov edx,DWORD PTR 4[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 4[ebx],ecx
jz $L029pw_end
; dl<0 Tail Round 2
mov ecx,0
mov edx,DWORD PTR 8[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 8[ebx],ecx
jz $L029pw_end
; dl<0 Tail Round 3
mov ecx,0
mov edx,DWORD PTR 12[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 12[ebx],ecx
jz $L029pw_end
; dl<0 Tail Round 4
mov ecx,0
mov edx,DWORD PTR 16[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 16[ebx],ecx
jz $L029pw_end
; dl<0 Tail Round 5
mov ecx,0
mov edx,DWORD PTR 20[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
dec ebp
mov DWORD PTR 20[ebx],ecx
jz $L029pw_end
; dl<0 Tail Round 6
mov ecx,0
mov edx,DWORD PTR 24[edi]
sub ecx,eax
mov eax,0
adc eax,eax
sub ecx,edx
adc eax,0
mov DWORD PTR 24[ebx],ecx
jmp $L029pw_end
$L030pw_pos:
and ebp,4294967288
jz $L033pw_pos_finish
$L034pw_pos_loop:
; dl>0 Round 0
mov ecx,DWORD PTR [esi]
sub ecx,eax
mov DWORD PTR [ebx],ecx
jnc $L035pw_nc0
; dl>0 Round 1
mov ecx,DWORD PTR 4[esi]
sub ecx,eax
mov DWORD PTR 4[ebx],ecx
jnc $L036pw_nc1
; dl>0 Round 2
mov ecx,DWORD PTR 8[esi]
sub ecx,eax
mov DWORD PTR 8[ebx],ecx
jnc $L037pw_nc2
; dl>0 Round 3
mov ecx,DWORD PTR 12[esi]
sub ecx,eax
mov DWORD PTR 12[ebx],ecx
jnc $L038pw_nc3
; dl>0 Round 4
mov ecx,DWORD PTR 16[esi]
sub ecx,eax
mov DWORD PTR 16[ebx],ecx
jnc $L039pw_nc4
; dl>0 Round 5
mov ecx,DWORD PTR 20[esi]
sub ecx,eax
mov DWORD PTR 20[ebx],ecx
jnc $L040pw_nc5
; dl>0 Round 6
mov ecx,DWORD PTR 24[esi]
sub ecx,eax
mov DWORD PTR 24[ebx],ecx
jnc $L041pw_nc6
; dl>0 Round 7
mov ecx,DWORD PTR 28[esi]
sub ecx,eax
mov DWORD PTR 28[ebx],ecx
jnc $L042pw_nc7
;
add esi,32
add ebx,32
sub ebp,8
jnz $L034pw_pos_loop
$L033pw_pos_finish:
mov ebp,DWORD PTR 36[esp]
and ebp,7
jz $L029pw_end
; dl>0 Tail Round 0
mov ecx,DWORD PTR [esi]
sub ecx,eax
mov DWORD PTR [ebx],ecx
jnc $L043pw_tail_nc0
dec ebp
jz $L029pw_end
; dl>0 Tail Round 1
mov ecx,DWORD PTR 4[esi]
sub ecx,eax
mov DWORD PTR 4[ebx],ecx
jnc $L044pw_tail_nc1
dec ebp
jz $L029pw_end
; dl>0 Tail Round 2
mov ecx,DWORD PTR 8[esi]
sub ecx,eax
mov DWORD PTR 8[ebx],ecx
jnc $L045pw_tail_nc2
dec ebp
jz $L029pw_end
; dl>0 Tail Round 3
mov ecx,DWORD PTR 12[esi]
sub ecx,eax
mov DWORD PTR 12[ebx],ecx
jnc $L046pw_tail_nc3
dec ebp
jz $L029pw_end
; dl>0 Tail Round 4
mov ecx,DWORD PTR 16[esi]
sub ecx,eax
mov DWORD PTR 16[ebx],ecx
jnc $L047pw_tail_nc4
dec ebp
jz $L029pw_end
; dl>0 Tail Round 5
mov ecx,DWORD PTR 20[esi]
sub ecx,eax
mov DWORD PTR 20[ebx],ecx
jnc $L048pw_tail_nc5
dec ebp
jz $L029pw_end
; dl>0 Tail Round 6
mov ecx,DWORD PTR 24[esi]
sub ecx,eax
mov DWORD PTR 24[ebx],ecx
jnc $L049pw_tail_nc6
mov eax,1
jmp $L029pw_end
$L050pw_nc_loop:
mov ecx,DWORD PTR [esi]
mov DWORD PTR [ebx],ecx
$L035pw_nc0:
mov ecx,DWORD PTR 4[esi]
mov DWORD PTR 4[ebx],ecx
$L036pw_nc1:
mov ecx,DWORD PTR 8[esi]
mov DWORD PTR 8[ebx],ecx
$L037pw_nc2:
mov ecx,DWORD PTR 12[esi]
mov DWORD PTR 12[ebx],ecx
$L038pw_nc3:
mov ecx,DWORD PTR 16[esi]
mov DWORD PTR 16[ebx],ecx
$L039pw_nc4:
mov ecx,DWORD PTR 20[esi]
mov DWORD PTR 20[ebx],ecx
$L040pw_nc5:
mov ecx,DWORD PTR 24[esi]
mov DWORD PTR 24[ebx],ecx
$L041pw_nc6:
mov ecx,DWORD PTR 28[esi]
mov DWORD PTR 28[ebx],ecx
$L042pw_nc7:
;
add esi,32
add ebx,32
sub ebp,8
jnz $L050pw_nc_loop
mov ebp,DWORD PTR 36[esp]
and ebp,7
jz $L051pw_nc_end
mov ecx,DWORD PTR [esi]
mov DWORD PTR [ebx],ecx
$L043pw_tail_nc0:
dec ebp
jz $L051pw_nc_end
mov ecx,DWORD PTR 4[esi]
mov DWORD PTR 4[ebx],ecx
$L044pw_tail_nc1:
dec ebp
jz $L051pw_nc_end
mov ecx,DWORD PTR 8[esi]
mov DWORD PTR 8[ebx],ecx
$L045pw_tail_nc2:
dec ebp
jz $L051pw_nc_end
mov ecx,DWORD PTR 12[esi]
mov DWORD PTR 12[ebx],ecx
$L046pw_tail_nc3:
dec ebp
jz $L051pw_nc_end
mov ecx,DWORD PTR 16[esi]
mov DWORD PTR 16[ebx],ecx
$L047pw_tail_nc4:
dec ebp
jz $L051pw_nc_end
mov ecx,DWORD PTR 20[esi]
mov DWORD PTR 20[ebx],ecx
$L048pw_tail_nc5:
dec ebp
jz $L051pw_nc_end
mov ecx,DWORD PTR 24[esi]
mov DWORD PTR 24[ebx],ecx
$L049pw_tail_nc6:
$L051pw_nc_end:
mov eax,0
$L029pw_end:
pop edi
pop esi
pop ebx
pop ebp
ret
_bn_sub_part_words ENDP
.text$ ENDS
.bss SEGMENT 'BSS'
COMM _OPENSSL_ia32cap_P:DWORD:4
.bss ENDS
END