Index: third_party/boringssl/win-x86/crypto/bn/x86-mont.asm |
diff --git a/third_party/boringssl/win-x86/crypto/bn/x86-mont.asm b/third_party/boringssl/win-x86/crypto/bn/x86-mont.asm |
index de7b949927258f9d725c73fa60bb278232f2dcd1..b1a4d59429df194200183b10044e821fb8dc4ad1 100644 |
--- a/third_party/boringssl/win-x86/crypto/bn/x86-mont.asm |
+++ b/third_party/boringssl/win-x86/crypto/bn/x86-mont.asm |
@@ -29,36 +29,51 @@ L$_bn_mul_mont_begin: |
jl NEAR L$000just_leave |
lea esi,[20+esp] |
lea edx,[24+esp] |
- mov ebp,esp |
add edi,2 |
neg edi |
- lea esp,[edi*4+esp-32] |
+ lea ebp,[edi*4+esp-32] |
neg edi |
- mov eax,esp |
+ mov eax,ebp |
sub eax,edx |
and eax,2047 |
- sub esp,eax |
- xor edx,esp |
+ sub ebp,eax |
+ xor edx,ebp |
and edx,2048 |
xor edx,2048 |
- sub esp,edx |
- and esp,-64 |
+ sub ebp,edx |
+ and ebp,-64 |
+ mov eax,esp |
+ sub eax,ebp |
+ and eax,-4096 |
+ mov edx,esp |
+ lea esp,[eax*1+ebp] |
+ mov eax,DWORD [esp] |
+ cmp esp,ebp |
+ ja NEAR L$001page_walk |
+ jmp NEAR L$002page_walk_done |
+align 16 |
+L$001page_walk: |
+ lea esp,[esp-4096] |
+ mov eax,DWORD [esp] |
+ cmp esp,ebp |
+ ja NEAR L$001page_walk |
+L$002page_walk_done: |
mov eax,DWORD [esi] |
mov ebx,DWORD [4+esi] |
mov ecx,DWORD [8+esi] |
- mov edx,DWORD [12+esi] |
+ mov ebp,DWORD [12+esi] |
mov esi,DWORD [16+esi] |
mov esi,DWORD [esi] |
mov DWORD [4+esp],eax |
mov DWORD [8+esp],ebx |
mov DWORD [12+esp],ecx |
- mov DWORD [16+esp],edx |
+ mov DWORD [16+esp],ebp |
mov DWORD [20+esp],esi |
lea ebx,[edi-3] |
- mov DWORD [24+esp],ebp |
+ mov DWORD [24+esp],edx |
lea eax,[_OPENSSL_ia32cap_P] |
bt DWORD [eax],26 |
- jnc NEAR L$001non_sse2 |
+ jnc NEAR L$003non_sse2 |
mov eax,-1 |
movd mm7,eax |
mov esi,DWORD [8+esp] |
@@ -82,7 +97,7 @@ L$_bn_mul_mont_begin: |
psrlq mm3,32 |
inc ecx |
align 16 |
-L$0021st: |
+L$0041st: |
pmuludq mm0,mm4 |
pmuludq mm1,mm5 |
paddq mm2,mm0 |
@@ -97,7 +112,7 @@ L$0021st: |
psrlq mm3,32 |
lea ecx,[1+ecx] |
cmp ecx,ebx |
- jl NEAR L$0021st |
+ jl NEAR L$0041st |
pmuludq mm0,mm4 |
pmuludq mm1,mm5 |
paddq mm2,mm0 |
@@ -111,7 +126,7 @@ L$0021st: |
paddq mm3,mm2 |
movq [32+ebx*4+esp],mm3 |
inc edx |
-L$003outer: |
+L$005outer: |
xor ecx,ecx |
movd mm4,DWORD [edx*4+edi] |
movd mm5,DWORD [esi] |
@@ -133,7 +148,7 @@ L$003outer: |
paddq mm2,mm6 |
inc ecx |
dec ebx |
-L$004inner: |
+L$006inner: |
pmuludq mm0,mm4 |
pmuludq mm1,mm5 |
paddq mm2,mm0 |
@@ -150,7 +165,7 @@ L$004inner: |
paddq mm2,mm6 |
dec ebx |
lea ecx,[1+ecx] |
- jnz NEAR L$004inner |
+ jnz NEAR L$006inner |
mov ebx,ecx |
pmuludq mm0,mm4 |
pmuludq mm1,mm5 |
@@ -168,11 +183,11 @@ L$004inner: |
movq [32+ebx*4+esp],mm3 |
lea edx,[1+edx] |
cmp edx,ebx |
- jle NEAR L$003outer |
+ jle NEAR L$005outer |
emms |
- jmp NEAR L$005common_tail |
+ jmp NEAR L$007common_tail |
align 16 |
-L$001non_sse2: |
+L$003non_sse2: |
mov esi,DWORD [8+esp] |
lea ebp,[1+ebx] |
mov edi,DWORD [12+esp] |
@@ -183,12 +198,12 @@ L$001non_sse2: |
lea eax,[4+ebx*4+edi] |
or ebp,edx |
mov edi,DWORD [edi] |
- jz NEAR L$006bn_sqr_mont |
+ jz NEAR L$008bn_sqr_mont |
mov DWORD [28+esp],eax |
mov eax,DWORD [esi] |
xor edx,edx |
align 16 |
-L$007mull: |
+L$009mull: |
mov ebp,edx |
mul edi |
add ebp,eax |
@@ -197,7 +212,7 @@ L$007mull: |
mov eax,DWORD [ecx*4+esi] |
cmp ecx,ebx |
mov DWORD [28+ecx*4+esp],ebp |
- jl NEAR L$007mull |
+ jl NEAR L$009mull |
mov ebp,edx |
mul edi |
mov edi,DWORD [20+esp] |
@@ -215,9 +230,9 @@ L$007mull: |
mov eax,DWORD [4+esi] |
adc edx,0 |
inc ecx |
- jmp NEAR L$0082ndmadd |
+ jmp NEAR L$0102ndmadd |
align 16 |
-L$0091stmadd: |
+L$0111stmadd: |
mov ebp,edx |
mul edi |
add ebp,DWORD [32+ecx*4+esp] |
@@ -228,7 +243,7 @@ L$0091stmadd: |
adc edx,0 |
cmp ecx,ebx |
mov DWORD [28+ecx*4+esp],ebp |
- jl NEAR L$0091stmadd |
+ jl NEAR L$0111stmadd |
mov ebp,edx |
mul edi |
add eax,DWORD [32+ebx*4+esp] |
@@ -251,7 +266,7 @@ L$0091stmadd: |
adc edx,0 |
mov ecx,1 |
align 16 |
-L$0082ndmadd: |
+L$0102ndmadd: |
mov ebp,edx |
mul edi |
add ebp,DWORD [32+ecx*4+esp] |
@@ -262,7 +277,7 @@ L$0082ndmadd: |
adc edx,0 |
cmp ecx,ebx |
mov DWORD [24+ecx*4+esp],ebp |
- jl NEAR L$0082ndmadd |
+ jl NEAR L$0102ndmadd |
mov ebp,edx |
mul edi |
add ebp,DWORD [32+ebx*4+esp] |
@@ -278,16 +293,16 @@ L$0082ndmadd: |
mov DWORD [32+ebx*4+esp],edx |
cmp ecx,DWORD [28+esp] |
mov DWORD [36+ebx*4+esp],eax |
- je NEAR L$005common_tail |
+ je NEAR L$007common_tail |
mov edi,DWORD [ecx] |
mov esi,DWORD [8+esp] |
mov DWORD [12+esp],ecx |
xor ecx,ecx |
xor edx,edx |
mov eax,DWORD [esi] |
- jmp NEAR L$0091stmadd |
+ jmp NEAR L$0111stmadd |
align 16 |
-L$006bn_sqr_mont: |
+L$008bn_sqr_mont: |
mov DWORD [esp],ebx |
mov DWORD [12+esp],ecx |
mov eax,edi |
@@ -298,7 +313,7 @@ L$006bn_sqr_mont: |
and ebx,1 |
inc ecx |
align 16 |
-L$010sqr: |
+L$012sqr: |
mov eax,DWORD [ecx*4+esi] |
mov ebp,edx |
mul edi |
@@ -310,7 +325,7 @@ L$010sqr: |
cmp ecx,DWORD [esp] |
mov ebx,eax |
mov DWORD [28+ecx*4+esp],ebp |
- jl NEAR L$010sqr |
+ jl NEAR L$012sqr |
mov eax,DWORD [ecx*4+esi] |
mov ebp,edx |
mul edi |
@@ -334,7 +349,7 @@ L$010sqr: |
mov eax,DWORD [4+esi] |
mov ecx,1 |
align 16 |
-L$0113rdmadd: |
+L$0133rdmadd: |
mov ebp,edx |
mul edi |
add ebp,DWORD [32+ecx*4+esp] |
@@ -353,7 +368,7 @@ L$0113rdmadd: |
adc edx,0 |
cmp ecx,ebx |
mov DWORD [24+ecx*4+esp],ebp |
- jl NEAR L$0113rdmadd |
+ jl NEAR L$0133rdmadd |
mov ebp,edx |
mul edi |
add ebp,DWORD [32+ebx*4+esp] |
@@ -369,7 +384,7 @@ L$0113rdmadd: |
mov DWORD [32+ebx*4+esp],edx |
cmp ecx,ebx |
mov DWORD [36+ebx*4+esp],eax |
- je NEAR L$005common_tail |
+ je NEAR L$007common_tail |
mov edi,DWORD [4+ecx*4+esi] |
lea ecx,[1+ecx] |
mov eax,edi |
@@ -381,12 +396,12 @@ L$0113rdmadd: |
xor ebp,ebp |
cmp ecx,ebx |
lea ecx,[1+ecx] |
- je NEAR L$012sqrlast |
+ je NEAR L$014sqrlast |
mov ebx,edx |
shr edx,1 |
and ebx,1 |
align 16 |
-L$013sqradd: |
+L$015sqradd: |
mov eax,DWORD [ecx*4+esi] |
mov ebp,edx |
mul edi |
@@ -402,13 +417,13 @@ L$013sqradd: |
cmp ecx,DWORD [esp] |
mov DWORD [28+ecx*4+esp],ebp |
mov ebx,eax |
- jle NEAR L$013sqradd |
+ jle NEAR L$015sqradd |
mov ebp,edx |
add edx,edx |
shr ebp,31 |
add edx,ebx |
adc ebp,0 |
-L$012sqrlast: |
+L$014sqrlast: |
mov edi,DWORD [20+esp] |
mov esi,DWORD [16+esp] |
imul edi,DWORD [32+esp] |
@@ -423,9 +438,9 @@ L$012sqrlast: |
adc edx,0 |
mov ecx,1 |
mov eax,DWORD [4+esi] |
- jmp NEAR L$0113rdmadd |
+ jmp NEAR L$0133rdmadd |
align 16 |
-L$005common_tail: |
+L$007common_tail: |
mov ebp,DWORD [16+esp] |
mov edi,DWORD [4+esp] |
lea esi,[32+esp] |
@@ -433,25 +448,26 @@ L$005common_tail: |
mov ecx,ebx |
xor edx,edx |
align 16 |
-L$014sub: |
+L$016sub: |
sbb eax,DWORD [edx*4+ebp] |
mov DWORD [edx*4+edi],eax |
dec ecx |
mov eax,DWORD [4+edx*4+esi] |
lea edx,[1+edx] |
- jge NEAR L$014sub |
+ jge NEAR L$016sub |
sbb eax,0 |
+ and esi,eax |
+ not eax |
+ mov ebp,edi |
+ and ebp,eax |
+ or esi,ebp |
align 16 |
-L$015copy: |
- mov edx,DWORD [ebx*4+esi] |
- mov ebp,DWORD [ebx*4+edi] |
- xor edx,ebp |
- and edx,eax |
- xor edx,ebp |
- mov DWORD [ebx*4+esi],ecx |
- mov DWORD [ebx*4+edi],edx |
+L$017copy: |
+ mov eax,DWORD [ebx*4+esi] |
+ mov DWORD [ebx*4+edi],eax |
+ mov DWORD [32+ebx*4+esp],ecx |
dec ebx |
- jge NEAR L$015copy |
+ jge NEAR L$017copy |
mov esp,DWORD [24+esp] |
mov eax,1 |
L$000just_leave: |