diff options
Diffstat (limited to 'src/lib/libcrypto/bn/asm/armv4-mont.pl')
-rw-r--r-- | src/lib/libcrypto/bn/asm/armv4-mont.pl | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/lib/libcrypto/bn/asm/armv4-mont.pl b/src/lib/libcrypto/bn/asm/armv4-mont.pl index 14e0d2d1dd..f78a8b5f0f 100644 --- a/src/lib/libcrypto/bn/asm/armv4-mont.pl +++ b/src/lib/libcrypto/bn/asm/armv4-mont.pl | |||
@@ -23,6 +23,9 @@ | |||
23 | # than 1/2KB. Windows CE port would be trivial, as it's exclusively | 23 | # than 1/2KB. Windows CE port would be trivial, as it's exclusively |
24 | # about decorations, ABI and instruction syntax are identical. | 24 | # about decorations, ABI and instruction syntax are identical. |
25 | 25 | ||
26 | while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} | ||
27 | open STDOUT,">$output"; | ||
28 | |||
26 | $num="r0"; # starts as num argument, but holds &tp[num-1] | 29 | $num="r0"; # starts as num argument, but holds &tp[num-1] |
27 | $ap="r1"; | 30 | $ap="r1"; |
28 | $bp="r2"; $bi="r2"; $rp="r2"; | 31 | $bp="r2"; $bi="r2"; $rp="r2"; |
@@ -89,9 +92,9 @@ bn_mul_mont: | |||
89 | .L1st: | 92 | .L1st: |
90 | ldr $aj,[$ap],#4 @ ap[j],ap++ | 93 | ldr $aj,[$ap],#4 @ ap[j],ap++ |
91 | mov $alo,$ahi | 94 | mov $alo,$ahi |
95 | ldr $nj,[$np],#4 @ np[j],np++ | ||
92 | mov $ahi,#0 | 96 | mov $ahi,#0 |
93 | umlal $alo,$ahi,$aj,$bi @ ap[j]*bp[0] | 97 | umlal $alo,$ahi,$aj,$bi @ ap[j]*bp[0] |
94 | ldr $nj,[$np],#4 @ np[j],np++ | ||
95 | mov $nhi,#0 | 98 | mov $nhi,#0 |
96 | umlal $nlo,$nhi,$nj,$n0 @ np[j]*n0 | 99 | umlal $nlo,$nhi,$nj,$n0 @ np[j]*n0 |
97 | adds $nlo,$nlo,$alo | 100 | adds $nlo,$nlo,$alo |
@@ -101,21 +104,21 @@ bn_mul_mont: | |||
101 | bne .L1st | 104 | bne .L1st |
102 | 105 | ||
103 | adds $nlo,$nlo,$ahi | 106 | adds $nlo,$nlo,$ahi |
107 | ldr $tp,[$_bp] @ restore bp | ||
104 | mov $nhi,#0 | 108 | mov $nhi,#0 |
109 | ldr $n0,[$_n0] @ restore n0 | ||
105 | adc $nhi,$nhi,#0 | 110 | adc $nhi,$nhi,#0 |
106 | ldr $tp,[$_bp] @ restore bp | ||
107 | str $nlo,[$num] @ tp[num-1]= | 111 | str $nlo,[$num] @ tp[num-1]= |
108 | ldr $n0,[$_n0] @ restore n0 | ||
109 | str $nhi,[$num,#4] @ tp[num]= | 112 | str $nhi,[$num,#4] @ tp[num]= |
110 | 113 | ||
111 | .Louter: | 114 | .Louter: |
112 | sub $tj,$num,sp @ "original" $num-1 value | 115 | sub $tj,$num,sp @ "original" $num-1 value |
113 | sub $ap,$ap,$tj @ "rewind" ap to &ap[1] | 116 | sub $ap,$ap,$tj @ "rewind" ap to &ap[1] |
114 | sub $np,$np,$tj @ "rewind" np to &np[1] | ||
115 | ldr $bi,[$tp,#4]! @ *(++bp) | 117 | ldr $bi,[$tp,#4]! @ *(++bp) |
118 | sub $np,$np,$tj @ "rewind" np to &np[1] | ||
116 | ldr $aj,[$ap,#-4] @ ap[0] | 119 | ldr $aj,[$ap,#-4] @ ap[0] |
117 | ldr $nj,[$np,#-4] @ np[0] | ||
118 | ldr $alo,[sp] @ tp[0] | 120 | ldr $alo,[sp] @ tp[0] |
121 | ldr $nj,[$np,#-4] @ np[0] | ||
119 | ldr $tj,[sp,#4] @ tp[1] | 122 | ldr $tj,[sp,#4] @ tp[1] |
120 | 123 | ||
121 | mov $ahi,#0 | 124 | mov $ahi,#0 |
@@ -129,13 +132,13 @@ bn_mul_mont: | |||
129 | .Linner: | 132 | .Linner: |
130 | ldr $aj,[$ap],#4 @ ap[j],ap++ | 133 | ldr $aj,[$ap],#4 @ ap[j],ap++ |
131 | adds $alo,$ahi,$tj @ +=tp[j] | 134 | adds $alo,$ahi,$tj @ +=tp[j] |
135 | ldr $nj,[$np],#4 @ np[j],np++ | ||
132 | mov $ahi,#0 | 136 | mov $ahi,#0 |
133 | umlal $alo,$ahi,$aj,$bi @ ap[j]*bp[i] | 137 | umlal $alo,$ahi,$aj,$bi @ ap[j]*bp[i] |
134 | ldr $nj,[$np],#4 @ np[j],np++ | ||
135 | mov $nhi,#0 | 138 | mov $nhi,#0 |
136 | umlal $nlo,$nhi,$nj,$n0 @ np[j]*n0 | 139 | umlal $nlo,$nhi,$nj,$n0 @ np[j]*n0 |
137 | ldr $tj,[$tp,#8] @ tp[j+1] | ||
138 | adc $ahi,$ahi,#0 | 140 | adc $ahi,$ahi,#0 |
141 | ldr $tj,[$tp,#8] @ tp[j+1] | ||
139 | adds $nlo,$nlo,$alo | 142 | adds $nlo,$nlo,$alo |
140 | str $nlo,[$tp],#4 @ tp[j-1]=,tp++ | 143 | str $nlo,[$tp],#4 @ tp[j-1]=,tp++ |
141 | adc $nlo,$nhi,#0 | 144 | adc $nlo,$nhi,#0 |
@@ -144,13 +147,13 @@ bn_mul_mont: | |||
144 | 147 | ||
145 | adds $nlo,$nlo,$ahi | 148 | adds $nlo,$nlo,$ahi |
146 | mov $nhi,#0 | 149 | mov $nhi,#0 |
150 | ldr $tp,[$_bp] @ restore bp | ||
147 | adc $nhi,$nhi,#0 | 151 | adc $nhi,$nhi,#0 |
152 | ldr $n0,[$_n0] @ restore n0 | ||
148 | adds $nlo,$nlo,$tj | 153 | adds $nlo,$nlo,$tj |
149 | adc $nhi,$nhi,#0 | ||
150 | ldr $tp,[$_bp] @ restore bp | ||
151 | ldr $tj,[$_bpend] @ restore &bp[num] | 154 | ldr $tj,[$_bpend] @ restore &bp[num] |
155 | adc $nhi,$nhi,#0 | ||
152 | str $nlo,[$num] @ tp[num-1]= | 156 | str $nlo,[$num] @ tp[num-1]= |
153 | ldr $n0,[$_n0] @ restore n0 | ||
154 | str $nhi,[$num,#4] @ tp[num]= | 157 | str $nhi,[$num,#4] @ tp[num]= |
155 | 158 | ||
156 | cmp $tp,$tj | 159 | cmp $tp,$tj |