123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- 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
- __mul_1x1_mmx PROC PRIVATE
- sub esp,36
- mov ecx,eax
- lea edx,DWORD PTR [eax*1+eax]
- and ecx,1073741823
- lea ebp,DWORD PTR [edx*1+edx]
- mov DWORD PTR [esp],0
- and edx,2147483647
- movd mm2,eax
- movd mm3,ebx
- mov DWORD PTR 4[esp],ecx
- xor ecx,edx
- pxor mm5,mm5
- pxor mm4,mm4
- mov DWORD PTR 8[esp],edx
- xor edx,ebp
- mov DWORD PTR 12[esp],ecx
- pcmpgtd mm5,mm2
- paddd mm2,mm2
- xor ecx,edx
- mov DWORD PTR 16[esp],ebp
- xor ebp,edx
- pand mm5,mm3
- pcmpgtd mm4,mm2
- mov DWORD PTR 20[esp],ecx
- xor ebp,ecx
- psllq mm5,31
- pand mm4,mm3
- mov DWORD PTR 24[esp],edx
- mov esi,7
- mov DWORD PTR 28[esp],ebp
- mov ebp,esi
- and esi,ebx
- shr ebx,3
- mov edi,ebp
- psllq mm4,30
- and edi,ebx
- shr ebx,3
- movd mm0,DWORD PTR [esi*4+esp]
- mov esi,ebp
- and esi,ebx
- shr ebx,3
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,3
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,6
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,9
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,12
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,15
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,18
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,21
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,24
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- pxor mm0,mm4
- psllq mm2,27
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- pxor mm0,mm5
- psllq mm1,30
- add esp,36
- pxor mm0,mm1
- ret
- __mul_1x1_mmx ENDP
- ALIGN 16
- __mul_1x1_ialu PROC PRIVATE
- sub esp,36
- mov ecx,eax
- lea edx,DWORD PTR [eax*1+eax]
- lea ebp,DWORD PTR [eax*4]
- and ecx,1073741823
- lea edi,DWORD PTR [eax*1+eax]
- sar eax,31
- mov DWORD PTR [esp],0
- and edx,2147483647
- mov DWORD PTR 4[esp],ecx
- xor ecx,edx
- mov DWORD PTR 8[esp],edx
- xor edx,ebp
- mov DWORD PTR 12[esp],ecx
- xor ecx,edx
- mov DWORD PTR 16[esp],ebp
- xor ebp,edx
- mov DWORD PTR 20[esp],ecx
- xor ebp,ecx
- sar edi,31
- and eax,ebx
- mov DWORD PTR 24[esp],edx
- and edi,ebx
- mov DWORD PTR 28[esp],ebp
- mov edx,eax
- shl eax,31
- mov ecx,edi
- shr edx,1
- mov esi,7
- shl edi,30
- and esi,ebx
- shr ecx,2
- xor eax,edi
- shr ebx,3
- mov edi,7
- and edi,ebx
- shr ebx,3
- xor edx,ecx
- xor eax,DWORD PTR [esi*4+esp]
- mov esi,7
- and esi,ebx
- shr ebx,3
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,3
- and edi,ebx
- shr ecx,29
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,6
- and esi,ebx
- shr ebp,26
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,9
- and edi,ebx
- shr ecx,23
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,12
- and esi,ebx
- shr ebp,20
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,15
- and edi,ebx
- shr ecx,17
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,18
- and esi,ebx
- shr ebp,14
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,21
- and edi,ebx
- shr ecx,11
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,24
- and esi,ebx
- shr ebp,8
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov ecx,ebp
- shl ebp,27
- mov edi,DWORD PTR [esi*4+esp]
- shr ecx,5
- mov esi,edi
- xor eax,ebp
- shl edi,30
- xor edx,ecx
- shr esi,2
- xor eax,edi
- xor edx,esi
- add esp,36
- ret
- __mul_1x1_ialu ENDP
- ALIGN 16
- _bn_GF2m_mul_2x2 PROC PUBLIC
- $L_bn_GF2m_mul_2x2_begin::
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- mov eax,DWORD PTR [edx]
- mov edx,DWORD PTR 4[edx]
- test eax,8388608
- jz $L000ialu
- test eax,16777216
- jz $L001mmx
- test edx,2
- jz $L001mmx
- movups xmm0,XMMWORD PTR 8[esp]
- shufps xmm0,xmm0,177
- DB 102,15,58,68,192,1
- mov eax,DWORD PTR 4[esp]
- movups XMMWORD PTR [eax],xmm0
- ret
- ALIGN 16
- $L001mmx:
- push ebp
- push ebx
- push esi
- push edi
- mov eax,DWORD PTR 24[esp]
- mov ebx,DWORD PTR 32[esp]
- call __mul_1x1_mmx
- movq mm7,mm0
- mov eax,DWORD PTR 28[esp]
- mov ebx,DWORD PTR 36[esp]
- call __mul_1x1_mmx
- movq mm6,mm0
- mov eax,DWORD PTR 24[esp]
- mov ebx,DWORD PTR 32[esp]
- xor eax,DWORD PTR 28[esp]
- xor ebx,DWORD PTR 36[esp]
- call __mul_1x1_mmx
- pxor mm0,mm7
- mov eax,DWORD PTR 20[esp]
- pxor mm0,mm6
- movq mm2,mm0
- psllq mm0,32
- pop edi
- psrlq mm2,32
- pop esi
- pxor mm0,mm6
- pop ebx
- pxor mm2,mm7
- movq QWORD PTR [eax],mm0
- pop ebp
- movq QWORD PTR 8[eax],mm2
- emms
- ret
- ALIGN 16
- $L000ialu:
- push ebp
- push ebx
- push esi
- push edi
- sub esp,20
- mov eax,DWORD PTR 44[esp]
- mov ebx,DWORD PTR 52[esp]
- call __mul_1x1_ialu
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],edx
- mov eax,DWORD PTR 48[esp]
- mov ebx,DWORD PTR 56[esp]
- call __mul_1x1_ialu
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],edx
- mov eax,DWORD PTR 44[esp]
- mov ebx,DWORD PTR 52[esp]
- xor eax,DWORD PTR 48[esp]
- xor ebx,DWORD PTR 56[esp]
- call __mul_1x1_ialu
- mov ebp,DWORD PTR 40[esp]
- mov ebx,DWORD PTR [esp]
- mov ecx,DWORD PTR 4[esp]
- mov edi,DWORD PTR 8[esp]
- mov esi,DWORD PTR 12[esp]
- xor eax,edx
- xor edx,ecx
- xor eax,ebx
- mov DWORD PTR [ebp],ebx
- xor edx,edi
- mov DWORD PTR 12[ebp],esi
- xor eax,esi
- add esp,20
- xor edx,esi
- pop edi
- xor eax,edx
- pop esi
- mov DWORD PTR 8[ebp],edx
- pop ebx
- mov DWORD PTR 4[ebp],eax
- pop ebp
- ret
- _bn_GF2m_mul_2x2 ENDP
- DB 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
- DB 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
- DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
- DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
- DB 62,0
- .text$ ENDS
- .bss SEGMENT 'BSS'
- COMM _OPENSSL_ia32cap_P:DWORD:4
- .bss ENDS
- END
|