mirror of https://github.com/lukechilds/node.git
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.
362 lines
6.1 KiB
362 lines
6.1 KiB
10 years ago
|
TITLE ../openssl/crypto/bn/asm/x86-gf2m.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
|
||
|
__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
|