Index: third_party/boringssl/win-x86/crypto/bn/bn-586.asm |
diff --git a/third_party/boringssl/win-x86/crypto/bn/bn-586.asm b/third_party/boringssl/win-x86/crypto/bn/bn-586.asm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..04420a999a54a66f0bd616b56ec1c36e71a8c3e7 |
--- /dev/null |
+++ b/third_party/boringssl/win-x86/crypto/bn/bn-586.asm |
@@ -0,0 +1,1384 @@ |
+%ifidn __OUTPUT_FORMAT__,obj |
+section code use32 class=code align=64 |
+%elifidn __OUTPUT_FORMAT__,win32 |
+%ifdef __YASM_VERSION_ID__ |
+%if __YASM_VERSION_ID__ < 01010000h |
+%error yasm version 1.1.0 or later needed. |
+%endif |
+; Yasm automatically includes .00 and complains about redefining it. |
+; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html |
+%else |
+$@feat.00 equ 1 |
+%endif |
+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 |