%ifidn __OUTPUT_FORMAT__,obj section code use32 class=code align=64 %elifidn __OUTPUT_FORMAT__,win32 section .text code align=64 %else section .text code %endif global _bn_mul_add_words align 16 _bn_mul_add_words: L$_bn_mul_add_words_begin: push ebp push ebx push esi push edi ; xor esi,esi mov edi,DWORD [20+esp] mov ecx,DWORD [28+esp] mov ebx,DWORD [24+esp] and ecx,4294967288 mov ebp,DWORD [32+esp] push ecx jz NEAR L$000maw_finish align 16 L$001maw_loop: ; Round 0 mov eax,DWORD [ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [edi] adc edx,0 mov DWORD [edi],eax mov esi,edx ; Round 4 mov eax,DWORD [4+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [4+edi] adc edx,0 mov DWORD [4+edi],eax mov esi,edx ; Round 8 mov eax,DWORD [8+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [8+edi] adc edx,0 mov DWORD [8+edi],eax mov esi,edx ; Round 12 mov eax,DWORD [12+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [12+edi] adc edx,0 mov DWORD [12+edi],eax mov esi,edx ; Round 16 mov eax,DWORD [16+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [16+edi] adc edx,0 mov DWORD [16+edi],eax mov esi,edx ; Round 20 mov eax,DWORD [20+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [20+edi] adc edx,0 mov DWORD [20+edi],eax mov esi,edx ; Round 24 mov eax,DWORD [24+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [24+edi] adc edx,0 mov DWORD [24+edi],eax mov esi,edx ; Round 28 mov eax,DWORD [28+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [28+edi] adc edx,0 mov DWORD [28+edi],eax mov esi,edx ; sub ecx,8 lea ebx,[32+ebx] lea edi,[32+edi] jnz NEAR L$001maw_loop L$000maw_finish: mov ecx,DWORD [32+esp] and ecx,7 jnz NEAR L$002maw_finish2 jmp NEAR L$003maw_end L$002maw_finish2: ; Tail Round 0 mov eax,DWORD [ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [edi] adc edx,0 dec ecx mov DWORD [edi],eax mov esi,edx jz NEAR L$003maw_end ; Tail Round 1 mov eax,DWORD [4+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [4+edi] adc edx,0 dec ecx mov DWORD [4+edi],eax mov esi,edx jz NEAR L$003maw_end ; Tail Round 2 mov eax,DWORD [8+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [8+edi] adc edx,0 dec ecx mov DWORD [8+edi],eax mov esi,edx jz NEAR L$003maw_end ; Tail Round 3 mov eax,DWORD [12+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [12+edi] adc edx,0 dec ecx mov DWORD [12+edi],eax mov esi,edx jz NEAR L$003maw_end ; Tail Round 4 mov eax,DWORD [16+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [16+edi] adc edx,0 dec ecx mov DWORD [16+edi],eax mov esi,edx jz NEAR L$003maw_end ; Tail Round 5 mov eax,DWORD [20+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [20+edi] adc edx,0 dec ecx mov DWORD [20+edi],eax mov esi,edx jz NEAR L$003maw_end ; Tail Round 6 mov eax,DWORD [24+ebx] mul ebp add eax,esi adc edx,0 add eax,DWORD [24+edi] adc edx,0 mov DWORD [24+edi],eax mov esi,edx L$003maw_end: mov eax,esi pop ecx pop edi pop esi pop ebx pop ebp ret global _bn_mul_words align 16 _bn_mul_words: L$_bn_mul_words_begin: push ebp push ebx push esi push edi ; xor esi,esi mov edi,DWORD [20+esp] mov ebx,DWORD [24+esp] mov ebp,DWORD [28+esp] mov ecx,DWORD [32+esp] and ebp,4294967288 jz NEAR L$004mw_finish L$005mw_loop: ; Round 0 mov eax,DWORD [ebx] mul ecx add eax,esi adc edx,0 mov DWORD [edi],eax mov esi,edx ; Round 4 mov eax,DWORD [4+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [4+edi],eax mov esi,edx ; Round 8 mov eax,DWORD [8+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [8+edi],eax mov esi,edx ; Round 12 mov eax,DWORD [12+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [12+edi],eax mov esi,edx ; Round 16 mov eax,DWORD [16+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [16+edi],eax mov esi,edx ; Round 20 mov eax,DWORD [20+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [20+edi],eax mov esi,edx ; Round 24 mov eax,DWORD [24+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [24+edi],eax mov esi,edx ; Round 28 mov eax,DWORD [28+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [28+edi],eax mov esi,edx ; add ebx,32 add edi,32 sub ebp,8 jz NEAR L$004mw_finish jmp NEAR L$005mw_loop L$004mw_finish: mov ebp,DWORD [28+esp] and ebp,7 jnz NEAR L$006mw_finish2 jmp NEAR L$007mw_end L$006mw_finish2: ; Tail Round 0 mov eax,DWORD [ebx] mul ecx add eax,esi adc edx,0 mov DWORD [edi],eax mov esi,edx dec ebp jz NEAR L$007mw_end ; Tail Round 1 mov eax,DWORD [4+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [4+edi],eax mov esi,edx dec ebp jz NEAR L$007mw_end ; Tail Round 2 mov eax,DWORD [8+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [8+edi],eax mov esi,edx dec ebp jz NEAR L$007mw_end ; Tail Round 3 mov eax,DWORD [12+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [12+edi],eax mov esi,edx dec ebp jz NEAR L$007mw_end ; Tail Round 4 mov eax,DWORD [16+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [16+edi],eax mov esi,edx dec ebp jz NEAR L$007mw_end ; Tail Round 5 mov eax,DWORD [20+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [20+edi],eax mov esi,edx dec ebp jz NEAR L$007mw_end ; Tail Round 6 mov eax,DWORD [24+ebx] mul ecx add eax,esi adc edx,0 mov DWORD [24+edi],eax mov esi,edx L$007mw_end: mov eax,esi pop edi pop esi pop ebx pop ebp ret global _bn_sqr_words align 16 _bn_sqr_words: L$_bn_sqr_words_begin: push ebp push ebx push esi push edi ; mov esi,DWORD [20+esp] mov edi,DWORD [24+esp] mov ebx,DWORD [28+esp] and ebx,4294967288 jz NEAR L$008sw_finish L$009sw_loop: ; Round 0 mov eax,DWORD [edi] mul eax mov DWORD [esi],eax mov DWORD [4+esi],edx ; Round 4 mov eax,DWORD [4+edi] mul eax mov DWORD [8+esi],eax mov DWORD [12+esi],edx ; Round 8 mov eax,DWORD [8+edi] mul eax mov DWORD [16+esi],eax mov DWORD [20+esi],edx ; Round 12 mov eax,DWORD [12+edi] mul eax mov DWORD [24+esi],eax mov DWORD [28+esi],edx ; Round 16 mov eax,DWORD [16+edi] mul eax mov DWORD [32+esi],eax mov DWORD [36+esi],edx ; Round 20 mov eax,DWORD [20+edi] mul eax mov DWORD [40+esi],eax mov DWORD [44+esi],edx ; Round 24 mov eax,DWORD [24+edi] mul eax mov DWORD [48+esi],eax mov DWORD [52+esi],edx ; Round 28 mov eax,DWORD [28+edi] mul eax mov DWORD [56+esi],eax mov DWORD [60+esi],edx ; add edi,32 add esi,64 sub ebx,8 jnz NEAR L$009sw_loop L$008sw_finish: mov ebx,DWORD [28+esp] and ebx,7 jz NEAR L$010sw_end ; Tail Round 0 mov eax,DWORD [edi] mul eax mov DWORD [esi],eax dec ebx mov DWORD [4+esi],edx jz NEAR L$010sw_end ; Tail Round 1 mov eax,DWORD [4+edi] mul eax mov DWORD [8+esi],eax dec ebx mov DWORD [12+esi],edx jz NEAR L$010sw_end ; Tail Round 2 mov eax,DWORD [8+edi] mul eax mov DWORD [16+esi],eax dec ebx mov DWORD [20+esi],edx jz NEAR L$010sw_end ; Tail Round 3 mov eax,DWORD [12+edi] mul eax mov DWORD [24+esi],eax dec ebx mov DWORD [28+esi],edx jz NEAR L$010sw_end ; Tail Round 4 mov eax,DWORD [16+edi] mul eax mov DWORD [32+esi],eax dec ebx mov DWORD [36+esi],edx jz NEAR L$010sw_end ; Tail Round 5 mov eax,DWORD [20+edi] mul eax mov DWORD [40+esi],eax dec ebx mov DWORD [44+esi],edx jz NEAR L$010sw_end ; Tail Round 6 mov eax,DWORD [24+edi] mul eax mov DWORD [48+esi],eax mov DWORD [52+esi],edx L$010sw_end: pop edi pop esi pop ebx pop ebp ret global _bn_div_words align 16 _bn_div_words: L$_bn_div_words_begin: mov edx,DWORD [4+esp] mov eax,DWORD [8+esp] mov ecx,DWORD [12+esp] div ecx ret global _bn_add_words align 16 _bn_add_words: L$_bn_add_words_begin: push ebp push ebx push esi push edi ; mov ebx,DWORD [20+esp] mov esi,DWORD [24+esp] mov edi,DWORD [28+esp] mov ebp,DWORD [32+esp] xor eax,eax and ebp,4294967288 jz NEAR L$011aw_finish L$012aw_loop: ; Round 0 mov ecx,DWORD [esi] mov edx,DWORD [edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [ebx],ecx ; Round 1 mov ecx,DWORD [4+esi] mov edx,DWORD [4+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [4+ebx],ecx ; Round 2 mov ecx,DWORD [8+esi] mov edx,DWORD [8+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [8+ebx],ecx ; Round 3 mov ecx,DWORD [12+esi] mov edx,DWORD [12+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [12+ebx],ecx ; Round 4 mov ecx,DWORD [16+esi] mov edx,DWORD [16+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [16+ebx],ecx ; Round 5 mov ecx,DWORD [20+esi] mov edx,DWORD [20+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [20+ebx],ecx ; Round 6 mov ecx,DWORD [24+esi] mov edx,DWORD [24+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [24+ebx],ecx ; Round 7 mov ecx,DWORD [28+esi] mov edx,DWORD [28+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [28+ebx],ecx ; add esi,32 add edi,32 add ebx,32 sub ebp,8 jnz NEAR L$012aw_loop L$011aw_finish: mov ebp,DWORD [32+esp] and ebp,7 jz NEAR L$013aw_end ; Tail Round 0 mov ecx,DWORD [esi] mov edx,DWORD [edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 dec ebp mov DWORD [ebx],ecx jz NEAR L$013aw_end ; Tail Round 1 mov ecx,DWORD [4+esi] mov edx,DWORD [4+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 dec ebp mov DWORD [4+ebx],ecx jz NEAR L$013aw_end ; Tail Round 2 mov ecx,DWORD [8+esi] mov edx,DWORD [8+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 dec ebp mov DWORD [8+ebx],ecx jz NEAR L$013aw_end ; Tail Round 3 mov ecx,DWORD [12+esi] mov edx,DWORD [12+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 dec ebp mov DWORD [12+ebx],ecx jz NEAR L$013aw_end ; Tail Round 4 mov ecx,DWORD [16+esi] mov edx,DWORD [16+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 dec ebp mov DWORD [16+ebx],ecx jz NEAR L$013aw_end ; Tail Round 5 mov ecx,DWORD [20+esi] mov edx,DWORD [20+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 dec ebp mov DWORD [20+ebx],ecx jz NEAR L$013aw_end ; Tail Round 6 mov ecx,DWORD [24+esi] mov edx,DWORD [24+edi] add ecx,eax mov eax,0 adc eax,eax add ecx,edx adc eax,0 mov DWORD [24+ebx],ecx L$013aw_end: pop edi pop esi pop ebx pop ebp ret global _bn_sub_words align 16 _bn_sub_words: L$_bn_sub_words_begin: push ebp push ebx push esi push edi ; mov ebx,DWORD [20+esp] mov esi,DWORD [24+esp] mov edi,DWORD [28+esp] mov ebp,DWORD [32+esp] xor eax,eax and ebp,4294967288 jz NEAR L$014aw_finish L$015aw_loop: ; Round 0 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx ; Round 1 mov ecx,DWORD [4+esi] mov edx,DWORD [4+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [4+ebx],ecx ; Round 2 mov ecx,DWORD [8+esi] mov edx,DWORD [8+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [8+ebx],ecx ; Round 3 mov ecx,DWORD [12+esi] mov edx,DWORD [12+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [12+ebx],ecx ; Round 4 mov ecx,DWORD [16+esi] mov edx,DWORD [16+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [16+ebx],ecx ; Round 5 mov ecx,DWORD [20+esi] mov edx,DWORD [20+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [20+ebx],ecx ; Round 6 mov ecx,DWORD [24+esi] mov edx,DWORD [24+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [24+ebx],ecx ; Round 7 mov ecx,DWORD [28+esi] mov edx,DWORD [28+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [28+ebx],ecx ; add esi,32 add edi,32 add ebx,32 sub ebp,8 jnz NEAR L$015aw_loop L$014aw_finish: mov ebp,DWORD [32+esp] and ebp,7 jz NEAR L$016aw_end ; Tail Round 0 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [ebx],ecx jz NEAR L$016aw_end ; Tail Round 1 mov ecx,DWORD [4+esi] mov edx,DWORD [4+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [4+ebx],ecx jz NEAR L$016aw_end ; Tail Round 2 mov ecx,DWORD [8+esi] mov edx,DWORD [8+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [8+ebx],ecx jz NEAR L$016aw_end ; Tail Round 3 mov ecx,DWORD [12+esi] mov edx,DWORD [12+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [12+ebx],ecx jz NEAR L$016aw_end ; Tail Round 4 mov ecx,DWORD [16+esi] mov edx,DWORD [16+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [16+ebx],ecx jz NEAR L$016aw_end ; Tail Round 5 mov ecx,DWORD [20+esi] mov edx,DWORD [20+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [20+ebx],ecx jz NEAR L$016aw_end ; Tail Round 6 mov ecx,DWORD [24+esi] mov edx,DWORD [24+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [24+ebx],ecx L$016aw_end: pop edi pop esi pop ebx pop ebp ret global _bn_sub_part_words align 16 _bn_sub_part_words: L$_bn_sub_part_words_begin: push ebp push ebx push esi push edi ; mov ebx,DWORD [20+esp] mov esi,DWORD [24+esp] mov edi,DWORD [28+esp] mov ebp,DWORD [32+esp] xor eax,eax and ebp,4294967288 jz NEAR L$017aw_finish L$018aw_loop: ; Round 0 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx ; Round 1 mov ecx,DWORD [4+esi] mov edx,DWORD [4+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [4+ebx],ecx ; Round 2 mov ecx,DWORD [8+esi] mov edx,DWORD [8+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [8+ebx],ecx ; Round 3 mov ecx,DWORD [12+esi] mov edx,DWORD [12+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [12+ebx],ecx ; Round 4 mov ecx,DWORD [16+esi] mov edx,DWORD [16+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [16+ebx],ecx ; Round 5 mov ecx,DWORD [20+esi] mov edx,DWORD [20+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [20+ebx],ecx ; Round 6 mov ecx,DWORD [24+esi] mov edx,DWORD [24+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [24+ebx],ecx ; Round 7 mov ecx,DWORD [28+esi] mov edx,DWORD [28+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [28+ebx],ecx ; add esi,32 add edi,32 add ebx,32 sub ebp,8 jnz NEAR L$018aw_loop L$017aw_finish: mov ebp,DWORD [32+esp] and ebp,7 jz NEAR L$019aw_end ; Tail Round 0 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx add esi,4 add edi,4 add ebx,4 dec ebp jz NEAR L$019aw_end ; Tail Round 1 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx add esi,4 add edi,4 add ebx,4 dec ebp jz NEAR L$019aw_end ; Tail Round 2 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx add esi,4 add edi,4 add ebx,4 dec ebp jz NEAR L$019aw_end ; Tail Round 3 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx add esi,4 add edi,4 add ebx,4 dec ebp jz NEAR L$019aw_end ; Tail Round 4 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx add esi,4 add edi,4 add ebx,4 dec ebp jz NEAR L$019aw_end ; Tail Round 5 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx add esi,4 add edi,4 add ebx,4 dec ebp jz NEAR L$019aw_end ; Tail Round 6 mov ecx,DWORD [esi] mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx add esi,4 add edi,4 add ebx,4 L$019aw_end: cmp DWORD [36+esp],0 je NEAR L$020pw_end mov ebp,DWORD [36+esp] cmp ebp,0 je NEAR L$020pw_end jge NEAR L$021pw_pos ; pw_neg mov edx,0 sub edx,ebp mov ebp,edx and ebp,4294967288 jz NEAR L$022pw_neg_finish L$023pw_neg_loop: ; dl<0 Round 0 mov ecx,0 mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [ebx],ecx ; dl<0 Round 1 mov ecx,0 mov edx,DWORD [4+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [4+ebx],ecx ; dl<0 Round 2 mov ecx,0 mov edx,DWORD [8+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [8+ebx],ecx ; dl<0 Round 3 mov ecx,0 mov edx,DWORD [12+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [12+ebx],ecx ; dl<0 Round 4 mov ecx,0 mov edx,DWORD [16+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [16+ebx],ecx ; dl<0 Round 5 mov ecx,0 mov edx,DWORD [20+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [20+ebx],ecx ; dl<0 Round 6 mov ecx,0 mov edx,DWORD [24+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [24+ebx],ecx ; dl<0 Round 7 mov ecx,0 mov edx,DWORD [28+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [28+ebx],ecx ; add edi,32 add ebx,32 sub ebp,8 jnz NEAR L$023pw_neg_loop L$022pw_neg_finish: mov edx,DWORD [36+esp] mov ebp,0 sub ebp,edx and ebp,7 jz NEAR L$020pw_end ; dl<0 Tail Round 0 mov ecx,0 mov edx,DWORD [edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [ebx],ecx jz NEAR L$020pw_end ; dl<0 Tail Round 1 mov ecx,0 mov edx,DWORD [4+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [4+ebx],ecx jz NEAR L$020pw_end ; dl<0 Tail Round 2 mov ecx,0 mov edx,DWORD [8+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [8+ebx],ecx jz NEAR L$020pw_end ; dl<0 Tail Round 3 mov ecx,0 mov edx,DWORD [12+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [12+ebx],ecx jz NEAR L$020pw_end ; dl<0 Tail Round 4 mov ecx,0 mov edx,DWORD [16+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [16+ebx],ecx jz NEAR L$020pw_end ; dl<0 Tail Round 5 mov ecx,0 mov edx,DWORD [20+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 dec ebp mov DWORD [20+ebx],ecx jz NEAR L$020pw_end ; dl<0 Tail Round 6 mov ecx,0 mov edx,DWORD [24+edi] sub ecx,eax mov eax,0 adc eax,eax sub ecx,edx adc eax,0 mov DWORD [24+ebx],ecx jmp NEAR L$020pw_end L$021pw_pos: and ebp,4294967288 jz NEAR L$024pw_pos_finish L$025pw_pos_loop: ; dl>0 Round 0 mov ecx,DWORD [esi] sub ecx,eax mov DWORD [ebx],ecx jnc NEAR L$026pw_nc0 ; dl>0 Round 1 mov ecx,DWORD [4+esi] sub ecx,eax mov DWORD [4+ebx],ecx jnc NEAR L$027pw_nc1 ; dl>0 Round 2 mov ecx,DWORD [8+esi] sub ecx,eax mov DWORD [8+ebx],ecx jnc NEAR L$028pw_nc2 ; dl>0 Round 3 mov ecx,DWORD [12+esi] sub ecx,eax mov DWORD [12+ebx],ecx jnc NEAR L$029pw_nc3 ; dl>0 Round 4 mov ecx,DWORD [16+esi] sub ecx,eax mov DWORD [16+ebx],ecx jnc NEAR L$030pw_nc4 ; dl>0 Round 5 mov ecx,DWORD [20+esi] sub ecx,eax mov DWORD [20+ebx],ecx jnc NEAR L$031pw_nc5 ; dl>0 Round 6 mov ecx,DWORD [24+esi] sub ecx,eax mov DWORD [24+ebx],ecx jnc NEAR L$032pw_nc6 ; dl>0 Round 7 mov ecx,DWORD [28+esi] sub ecx,eax mov DWORD [28+ebx],ecx jnc NEAR L$033pw_nc7 ; add esi,32 add ebx,32 sub ebp,8 jnz NEAR L$025pw_pos_loop L$024pw_pos_finish: mov ebp,DWORD [36+esp] and ebp,7 jz NEAR L$020pw_end ; dl>0 Tail Round 0 mov ecx,DWORD [esi] sub ecx,eax mov DWORD [ebx],ecx jnc NEAR L$034pw_tail_nc0 dec ebp jz NEAR L$020pw_end ; dl>0 Tail Round 1 mov ecx,DWORD [4+esi] sub ecx,eax mov DWORD [4+ebx],ecx jnc NEAR L$035pw_tail_nc1 dec ebp jz NEAR L$020pw_end ; dl>0 Tail Round 2 mov ecx,DWORD [8+esi] sub ecx,eax mov DWORD [8+ebx],ecx jnc NEAR L$036pw_tail_nc2 dec ebp jz NEAR L$020pw_end ; dl>0 Tail Round 3 mov ecx,DWORD [12+esi] sub ecx,eax mov DWORD [12+ebx],ecx jnc NEAR L$037pw_tail_nc3 dec ebp jz NEAR L$020pw_end ; dl>0 Tail Round 4 mov ecx,DWORD [16+esi] sub ecx,eax mov DWORD [16+ebx],ecx jnc NEAR L$038pw_tail_nc4 dec ebp jz NEAR L$020pw_end ; dl>0 Tail Round 5 mov ecx,DWORD [20+esi] sub ecx,eax mov DWORD [20+ebx],ecx jnc NEAR L$039pw_tail_nc5 dec ebp jz NEAR L$020pw_end ; dl>0 Tail Round 6 mov ecx,DWORD [24+esi] sub ecx,eax mov DWORD [24+ebx],ecx jnc NEAR L$040pw_tail_nc6 mov eax,1 jmp NEAR L$020pw_end L$041pw_nc_loop: mov ecx,DWORD [esi] mov DWORD [ebx],ecx L$026pw_nc0: mov ecx,DWORD [4+esi] mov DWORD [4+ebx],ecx L$027pw_nc1: mov ecx,DWORD [8+esi] mov DWORD [8+ebx],ecx L$028pw_nc2: mov ecx,DWORD [12+esi] mov DWORD [12+ebx],ecx L$029pw_nc3: mov ecx,DWORD [16+esi] mov DWORD [16+ebx],ecx L$030pw_nc4: mov ecx,DWORD [20+esi] mov DWORD [20+ebx],ecx L$031pw_nc5: mov ecx,DWORD [24+esi] mov DWORD [24+ebx],ecx L$032pw_nc6: mov ecx,DWORD [28+esi] mov DWORD [28+ebx],ecx L$033pw_nc7: ; add esi,32 add ebx,32 sub ebp,8 jnz NEAR L$041pw_nc_loop mov ebp,DWORD [36+esp] and ebp,7 jz NEAR L$042pw_nc_end mov ecx,DWORD [esi] mov DWORD [ebx],ecx L$034pw_tail_nc0: dec ebp jz NEAR L$042pw_nc_end mov ecx,DWORD [4+esi] mov DWORD [4+ebx],ecx L$035pw_tail_nc1: dec ebp jz NEAR L$042pw_nc_end mov ecx,DWORD [8+esi] mov DWORD [8+ebx],ecx L$036pw_tail_nc2: dec ebp jz NEAR L$042pw_nc_end mov ecx,DWORD [12+esi] mov DWORD [12+ebx],ecx L$037pw_tail_nc3: dec ebp jz NEAR L$042pw_nc_end mov ecx,DWORD [16+esi] mov DWORD [16+ebx],ecx L$038pw_tail_nc4: dec ebp jz NEAR L$042pw_nc_end mov ecx,DWORD [20+esi] mov DWORD [20+ebx],ecx L$039pw_tail_nc5: dec ebp jz NEAR L$042pw_nc_end mov ecx,DWORD [24+esi] mov DWORD [24+ebx],ecx L$040pw_tail_nc6: L$042pw_nc_end: mov eax,0 L$020pw_end: pop edi pop esi pop ebx pop ebp ret