| %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 |
| ;extern _OPENSSL_ia32cap_P |
| global _bn_mul_add_words |
| align 16 |
| _bn_mul_add_words: |
| L$_bn_mul_add_words_begin: |
| lea eax,[_OPENSSL_ia32cap_P] |
| bt DWORD [eax],26 |
| jnc NEAR L$000maw_non_sse2 |
| mov eax,DWORD [4+esp] |
| mov edx,DWORD [8+esp] |
| mov ecx,DWORD [12+esp] |
| movd mm0,DWORD [16+esp] |
| pxor mm1,mm1 |
| jmp NEAR L$001maw_sse2_entry |
| align 16 |
| L$002maw_sse2_unrolled: |
| movd mm3,DWORD [eax] |
| paddq mm1,mm3 |
| movd mm2,DWORD [edx] |
| pmuludq mm2,mm0 |
| movd mm4,DWORD [4+edx] |
| pmuludq mm4,mm0 |
| movd mm6,DWORD [8+edx] |
| pmuludq mm6,mm0 |
| movd mm7,DWORD [12+edx] |
| pmuludq mm7,mm0 |
| paddq mm1,mm2 |
| movd mm3,DWORD [4+eax] |
| paddq mm3,mm4 |
| movd mm5,DWORD [8+eax] |
| paddq mm5,mm6 |
| movd mm4,DWORD [12+eax] |
| paddq mm7,mm4 |
| movd DWORD [eax],mm1 |
| movd mm2,DWORD [16+edx] |
| pmuludq mm2,mm0 |
| psrlq mm1,32 |
| movd mm4,DWORD [20+edx] |
| pmuludq mm4,mm0 |
| paddq mm1,mm3 |
| movd mm6,DWORD [24+edx] |
| pmuludq mm6,mm0 |
| movd DWORD [4+eax],mm1 |
| psrlq mm1,32 |
| movd mm3,DWORD [28+edx] |
| add edx,32 |
| pmuludq mm3,mm0 |
| paddq mm1,mm5 |
| movd mm5,DWORD [16+eax] |
| paddq mm2,mm5 |
| movd DWORD [8+eax],mm1 |
| psrlq mm1,32 |
| paddq mm1,mm7 |
| movd mm5,DWORD [20+eax] |
| paddq mm4,mm5 |
| movd DWORD [12+eax],mm1 |
| psrlq mm1,32 |
| paddq mm1,mm2 |
| movd mm5,DWORD [24+eax] |
| paddq mm6,mm5 |
| movd DWORD [16+eax],mm1 |
| psrlq mm1,32 |
| paddq mm1,mm4 |
| movd mm5,DWORD [28+eax] |
| paddq mm3,mm5 |
| movd DWORD [20+eax],mm1 |
| psrlq mm1,32 |
| paddq mm1,mm6 |
| movd DWORD [24+eax],mm1 |
| psrlq mm1,32 |
| paddq mm1,mm3 |
| movd DWORD [28+eax],mm1 |
| lea eax,[32+eax] |
| psrlq mm1,32 |
| sub ecx,8 |
| jz NEAR L$003maw_sse2_exit |
| L$001maw_sse2_entry: |
| test ecx,4294967288 |
| jnz NEAR L$002maw_sse2_unrolled |
| align 4 |
| L$004maw_sse2_loop: |
| movd mm2,DWORD [edx] |
| movd mm3,DWORD [eax] |
| pmuludq mm2,mm0 |
| lea edx,[4+edx] |
| paddq mm1,mm3 |
| paddq mm1,mm2 |
| movd DWORD [eax],mm1 |
| sub ecx,1 |
| psrlq mm1,32 |
| lea eax,[4+eax] |
| jnz NEAR L$004maw_sse2_loop |
| L$003maw_sse2_exit: |
| movd eax,mm1 |
| emms |
| ret |
| align 16 |
| L$000maw_non_sse2: |
| 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$005maw_finish |
| align 16 |
| L$006maw_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$006maw_loop |
| L$005maw_finish: |
| mov ecx,DWORD [32+esp] |
| and ecx,7 |
| jnz NEAR L$007maw_finish2 |
| jmp NEAR L$008maw_end |
| L$007maw_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$008maw_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$008maw_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$008maw_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$008maw_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$008maw_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$008maw_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$008maw_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: |
| lea eax,[_OPENSSL_ia32cap_P] |
| bt DWORD [eax],26 |
| jnc NEAR L$009mw_non_sse2 |
| mov eax,DWORD [4+esp] |
| mov edx,DWORD [8+esp] |
| mov ecx,DWORD [12+esp] |
| movd mm0,DWORD [16+esp] |
| pxor mm1,mm1 |
| align 16 |
| L$010mw_sse2_loop: |
| movd mm2,DWORD [edx] |
| pmuludq mm2,mm0 |
| lea edx,[4+edx] |
| paddq mm1,mm2 |
| movd DWORD [eax],mm1 |
| sub ecx,1 |
| psrlq mm1,32 |
| lea eax,[4+eax] |
| jnz NEAR L$010mw_sse2_loop |
| movd eax,mm1 |
| emms |
| ret |
| align 16 |
| L$009mw_non_sse2: |
| 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$011mw_finish |
| L$012mw_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$011mw_finish |
| jmp NEAR L$012mw_loop |
| L$011mw_finish: |
| mov ebp,DWORD [28+esp] |
| and ebp,7 |
| jnz NEAR L$013mw_finish2 |
| jmp NEAR L$014mw_end |
| L$013mw_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$014mw_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$014mw_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$014mw_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$014mw_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$014mw_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$014mw_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$014mw_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: |
| lea eax,[_OPENSSL_ia32cap_P] |
| bt DWORD [eax],26 |
| jnc NEAR L$015sqr_non_sse2 |
| mov eax,DWORD [4+esp] |
| mov edx,DWORD [8+esp] |
| mov ecx,DWORD [12+esp] |
| align 16 |
| L$016sqr_sse2_loop: |
| movd mm0,DWORD [edx] |
| pmuludq mm0,mm0 |
| lea edx,[4+edx] |
| movq [eax],mm0 |
| sub ecx,1 |
| lea eax,[8+eax] |
| jnz NEAR L$016sqr_sse2_loop |
| emms |
| ret |
| align 16 |
| L$015sqr_non_sse2: |
| 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$017sw_finish |
| L$018sw_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$018sw_loop |
| L$017sw_finish: |
| mov ebx,DWORD [28+esp] |
| and ebx,7 |
| jz NEAR L$019sw_end |
| ; Tail Round 0 |
| mov eax,DWORD [edi] |
| mul eax |
| mov DWORD [esi],eax |
| dec ebx |
| mov DWORD [4+esi],edx |
| jz NEAR L$019sw_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$019sw_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$019sw_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$019sw_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$019sw_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$019sw_end |
| ; Tail Round 6 |
| mov eax,DWORD [24+edi] |
| mul eax |
| mov DWORD [48+esi],eax |
| mov DWORD [52+esi],edx |
| L$019sw_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$020aw_finish |
| L$021aw_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$021aw_loop |
| L$020aw_finish: |
| mov ebp,DWORD [32+esp] |
| and ebp,7 |
| jz NEAR L$022aw_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$022aw_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$022aw_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$022aw_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$022aw_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$022aw_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$022aw_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$022aw_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$023aw_finish |
| L$024aw_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$024aw_loop |
| L$023aw_finish: |
| mov ebp,DWORD [32+esp] |
| and ebp,7 |
| jz NEAR L$025aw_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$025aw_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$025aw_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$025aw_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$025aw_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$025aw_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$025aw_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$025aw_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$026aw_finish |
| L$027aw_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$027aw_loop |
| L$026aw_finish: |
| mov ebp,DWORD [32+esp] |
| and ebp,7 |
| jz NEAR L$028aw_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$028aw_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$028aw_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$028aw_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$028aw_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$028aw_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$028aw_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$028aw_end: |
| cmp DWORD [36+esp],0 |
| je NEAR L$029pw_end |
| mov ebp,DWORD [36+esp] |
| cmp ebp,0 |
| je NEAR L$029pw_end |
| jge NEAR L$030pw_pos |
| ; pw_neg |
| mov edx,0 |
| sub edx,ebp |
| mov ebp,edx |
| and ebp,4294967288 |
| jz NEAR L$031pw_neg_finish |
| L$032pw_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$032pw_neg_loop |
| L$031pw_neg_finish: |
| mov edx,DWORD [36+esp] |
| mov ebp,0 |
| sub ebp,edx |
| and ebp,7 |
| jz NEAR L$029pw_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$029pw_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$029pw_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$029pw_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$029pw_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$029pw_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$029pw_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$029pw_end |
| L$030pw_pos: |
| and ebp,4294967288 |
| jz NEAR L$033pw_pos_finish |
| L$034pw_pos_loop: |
| ; dl>0 Round 0 |
| mov ecx,DWORD [esi] |
| sub ecx,eax |
| mov DWORD [ebx],ecx |
| jnc NEAR L$035pw_nc0 |
| ; dl>0 Round 1 |
| mov ecx,DWORD [4+esi] |
| sub ecx,eax |
| mov DWORD [4+ebx],ecx |
| jnc NEAR L$036pw_nc1 |
| ; dl>0 Round 2 |
| mov ecx,DWORD [8+esi] |
| sub ecx,eax |
| mov DWORD [8+ebx],ecx |
| jnc NEAR L$037pw_nc2 |
| ; dl>0 Round 3 |
| mov ecx,DWORD [12+esi] |
| sub ecx,eax |
| mov DWORD [12+ebx],ecx |
| jnc NEAR L$038pw_nc3 |
| ; dl>0 Round 4 |
| mov ecx,DWORD [16+esi] |
| sub ecx,eax |
| mov DWORD [16+ebx],ecx |
| jnc NEAR L$039pw_nc4 |
| ; dl>0 Round 5 |
| mov ecx,DWORD [20+esi] |
| sub ecx,eax |
| mov DWORD [20+ebx],ecx |
| jnc NEAR L$040pw_nc5 |
| ; dl>0 Round 6 |
| mov ecx,DWORD [24+esi] |
| sub ecx,eax |
| mov DWORD [24+ebx],ecx |
| jnc NEAR L$041pw_nc6 |
| ; dl>0 Round 7 |
| mov ecx,DWORD [28+esi] |
| sub ecx,eax |
| mov DWORD [28+ebx],ecx |
| jnc NEAR L$042pw_nc7 |
| ; |
| add esi,32 |
| add ebx,32 |
| sub ebp,8 |
| jnz NEAR L$034pw_pos_loop |
| L$033pw_pos_finish: |
| mov ebp,DWORD [36+esp] |
| and ebp,7 |
| jz NEAR L$029pw_end |
| ; dl>0 Tail Round 0 |
| mov ecx,DWORD [esi] |
| sub ecx,eax |
| mov DWORD [ebx],ecx |
| jnc NEAR L$043pw_tail_nc0 |
| dec ebp |
| jz NEAR L$029pw_end |
| ; dl>0 Tail Round 1 |
| mov ecx,DWORD [4+esi] |
| sub ecx,eax |
| mov DWORD [4+ebx],ecx |
| jnc NEAR L$044pw_tail_nc1 |
| dec ebp |
| jz NEAR L$029pw_end |
| ; dl>0 Tail Round 2 |
| mov ecx,DWORD [8+esi] |
| sub ecx,eax |
| mov DWORD [8+ebx],ecx |
| jnc NEAR L$045pw_tail_nc2 |
| dec ebp |
| jz NEAR L$029pw_end |
| ; dl>0 Tail Round 3 |
| mov ecx,DWORD [12+esi] |
| sub ecx,eax |
| mov DWORD [12+ebx],ecx |
| jnc NEAR L$046pw_tail_nc3 |
| dec ebp |
| jz NEAR L$029pw_end |
| ; dl>0 Tail Round 4 |
| mov ecx,DWORD [16+esi] |
| sub ecx,eax |
| mov DWORD [16+ebx],ecx |
| jnc NEAR L$047pw_tail_nc4 |
| dec ebp |
| jz NEAR L$029pw_end |
| ; dl>0 Tail Round 5 |
| mov ecx,DWORD [20+esi] |
| sub ecx,eax |
| mov DWORD [20+ebx],ecx |
| jnc NEAR L$048pw_tail_nc5 |
| dec ebp |
| jz NEAR L$029pw_end |
| ; dl>0 Tail Round 6 |
| mov ecx,DWORD [24+esi] |
| sub ecx,eax |
| mov DWORD [24+ebx],ecx |
| jnc NEAR L$049pw_tail_nc6 |
| mov eax,1 |
| jmp NEAR L$029pw_end |
| L$050pw_nc_loop: |
| mov ecx,DWORD [esi] |
| mov DWORD [ebx],ecx |
| L$035pw_nc0: |
| mov ecx,DWORD [4+esi] |
| mov DWORD [4+ebx],ecx |
| L$036pw_nc1: |
| mov ecx,DWORD [8+esi] |
| mov DWORD [8+ebx],ecx |
| L$037pw_nc2: |
| mov ecx,DWORD [12+esi] |
| mov DWORD [12+ebx],ecx |
| L$038pw_nc3: |
| mov ecx,DWORD [16+esi] |
| mov DWORD [16+ebx],ecx |
| L$039pw_nc4: |
| mov ecx,DWORD [20+esi] |
| mov DWORD [20+ebx],ecx |
| L$040pw_nc5: |
| mov ecx,DWORD [24+esi] |
| mov DWORD [24+ebx],ecx |
| L$041pw_nc6: |
| mov ecx,DWORD [28+esi] |
| mov DWORD [28+ebx],ecx |
| L$042pw_nc7: |
| ; |
| add esi,32 |
| add ebx,32 |
| sub ebp,8 |
| jnz NEAR L$050pw_nc_loop |
| mov ebp,DWORD [36+esp] |
| and ebp,7 |
| jz NEAR L$051pw_nc_end |
| mov ecx,DWORD [esi] |
| mov DWORD [ebx],ecx |
| L$043pw_tail_nc0: |
| dec ebp |
| jz NEAR L$051pw_nc_end |
| mov ecx,DWORD [4+esi] |
| mov DWORD [4+ebx],ecx |
| L$044pw_tail_nc1: |
| dec ebp |
| jz NEAR L$051pw_nc_end |
| mov ecx,DWORD [8+esi] |
| mov DWORD [8+ebx],ecx |
| L$045pw_tail_nc2: |
| dec ebp |
| jz NEAR L$051pw_nc_end |
| mov ecx,DWORD [12+esi] |
| mov DWORD [12+ebx],ecx |
| L$046pw_tail_nc3: |
| dec ebp |
| jz NEAR L$051pw_nc_end |
| mov ecx,DWORD [16+esi] |
| mov DWORD [16+ebx],ecx |
| L$047pw_tail_nc4: |
| dec ebp |
| jz NEAR L$051pw_nc_end |
| mov ecx,DWORD [20+esi] |
| mov DWORD [20+ebx],ecx |
| L$048pw_tail_nc5: |
| dec ebp |
| jz NEAR L$051pw_nc_end |
| mov ecx,DWORD [24+esi] |
| mov DWORD [24+ebx],ecx |
| L$049pw_tail_nc6: |
| L$051pw_nc_end: |
| mov eax,0 |
| L$029pw_end: |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |
| segment .bss |
| common _OPENSSL_ia32cap_P 16 |