diff options
author | ryker <> | 1998-10-05 20:13:14 +0000 |
---|---|---|
committer | ryker <> | 1998-10-05 20:13:14 +0000 |
commit | fe5d0717e2760d02faf23bf5a714f17b33ae4abb (patch) | |
tree | 8d4ad346f10a36bdd90b503d222bda6b4ecd0037 /src/lib/libcrypto/bn/asm | |
parent | 75bf5ead4149b2b67781def7ace1ec720ae1753e (diff) | |
parent | aeeae06a79815dc190061534d47236cec09f9e32 (diff) | |
download | openbsd-fe5d0717e2760d02faf23bf5a714f17b33ae4abb.tar.gz openbsd-fe5d0717e2760d02faf23bf5a714f17b33ae4abb.tar.bz2 openbsd-fe5d0717e2760d02faf23bf5a714f17b33ae4abb.zip |
This commit was generated by cvs2git to track changes on a CVS vendor
branch.
Diffstat (limited to 'src/lib/libcrypto/bn/asm')
-rw-r--r-- | src/lib/libcrypto/bn/asm/bn-586.pl | 314 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/pa-risc2.s | 416 |
2 files changed, 730 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bn/asm/bn-586.pl b/src/lib/libcrypto/bn/asm/bn-586.pl new file mode 100644 index 0000000000..19d425ee96 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/bn-586.pl | |||
@@ -0,0 +1,314 @@ | |||
1 | #!/usr/bin/perl | ||
2 | # | ||
3 | |||
4 | #!/usr/local/bin/perl | ||
5 | |||
6 | push(@INC,"perlasm","../../perlasm"); | ||
7 | require "x86asm.pl"; | ||
8 | |||
9 | &asm_init($ARGV[0],"bn-586.pl"); | ||
10 | |||
11 | &bn_mul_add_words("bn_mul_add_words"); | ||
12 | &bn_mul_words("bn_mul_words"); | ||
13 | &bn_sqr_words("bn_sqr_words"); | ||
14 | &bn_div64("bn_div64"); | ||
15 | &bn_add_words("bn_add_words"); | ||
16 | |||
17 | &asm_finish(); | ||
18 | |||
19 | sub bn_mul_add_words | ||
20 | { | ||
21 | local($name)=@_; | ||
22 | |||
23 | &function_begin($name,""); | ||
24 | |||
25 | &comment(""); | ||
26 | $Low="eax"; | ||
27 | $High="edx"; | ||
28 | $a="ebx"; | ||
29 | $w="ebp"; | ||
30 | $r="edi"; | ||
31 | $c="esi"; | ||
32 | |||
33 | &xor($c,$c); # clear carry | ||
34 | &mov($r,&wparam(0)); # | ||
35 | |||
36 | &mov("ecx",&wparam(2)); # | ||
37 | &mov($a,&wparam(1)); # | ||
38 | |||
39 | &and("ecx",0xfffffff8); # num / 8 | ||
40 | &mov($w,&wparam(3)); # | ||
41 | |||
42 | &push("ecx"); # Up the stack for a tmp variable | ||
43 | |||
44 | &jz(&label("maw_finish")); | ||
45 | |||
46 | &set_label("maw_loop",0); | ||
47 | |||
48 | &mov(&swtmp(0),"ecx"); # | ||
49 | |||
50 | for ($i=0; $i<32; $i+=4) | ||
51 | { | ||
52 | &comment("Round $i"); | ||
53 | |||
54 | &mov("eax",&DWP($i,$a,"",0)); # *a | ||
55 | &mul($w); # *a * w | ||
56 | &add("eax",$c); # L(t)+= *r | ||
57 | &mov($c,&DWP($i,$r,"",0)); # L(t)+= *r | ||
58 | &adc("edx",0); # H(t)+=carry | ||
59 | &add("eax",$c); # L(t)+=c | ||
60 | &adc("edx",0); # H(t)+=carry | ||
61 | &mov(&DWP($i,$r,"",0),"eax"); # *r= L(t); | ||
62 | &mov($c,"edx"); # c= H(t); | ||
63 | } | ||
64 | |||
65 | &comment(""); | ||
66 | &mov("ecx",&swtmp(0)); # | ||
67 | &add($a,32); | ||
68 | &add($r,32); | ||
69 | &sub("ecx",8); | ||
70 | &jnz(&label("maw_loop")); | ||
71 | |||
72 | &set_label("maw_finish",0); | ||
73 | &mov("ecx",&wparam(2)); # get num | ||
74 | &and("ecx",7); | ||
75 | &jnz(&label("maw_finish2")); # helps branch prediction | ||
76 | &jmp(&label("maw_end")); | ||
77 | |||
78 | &set_label("maw_finish2",1); | ||
79 | for ($i=0; $i<7; $i++) | ||
80 | { | ||
81 | &comment("Tail Round $i"); | ||
82 | &mov("eax",&DWP($i*4,$a,"",0));# *a | ||
83 | &mul($w); # *a * w | ||
84 | &add("eax",$c); # L(t)+=c | ||
85 | &mov($c,&DWP($i*4,$r,"",0)); # L(t)+= *r | ||
86 | &adc("edx",0); # H(t)+=carry | ||
87 | &add("eax",$c); | ||
88 | &adc("edx",0); # H(t)+=carry | ||
89 | &dec("ecx") if ($i != 7-1); | ||
90 | &mov(&DWP($i*4,$r,"",0),"eax"); # *r= L(t); | ||
91 | &mov($c,"edx"); # c= H(t); | ||
92 | &jz(&label("maw_end")) if ($i != 7-1); | ||
93 | } | ||
94 | &set_label("maw_end",0); | ||
95 | &mov("eax",$c); | ||
96 | |||
97 | &pop("ecx"); # clear variable from | ||
98 | |||
99 | &function_end($name); | ||
100 | } | ||
101 | |||
102 | sub bn_mul_words | ||
103 | { | ||
104 | local($name)=@_; | ||
105 | |||
106 | &function_begin($name,""); | ||
107 | |||
108 | &comment(""); | ||
109 | $Low="eax"; | ||
110 | $High="edx"; | ||
111 | $a="ebx"; | ||
112 | $w="ecx"; | ||
113 | $r="edi"; | ||
114 | $c="esi"; | ||
115 | $num="ebp"; | ||
116 | |||
117 | &xor($c,$c); # clear carry | ||
118 | &mov($r,&wparam(0)); # | ||
119 | &mov($a,&wparam(1)); # | ||
120 | &mov($num,&wparam(2)); # | ||
121 | &mov($w,&wparam(3)); # | ||
122 | |||
123 | &and($num,0xfffffff8); # num / 8 | ||
124 | &jz(&label("mw_finish")); | ||
125 | |||
126 | &set_label("mw_loop",0); | ||
127 | for ($i=0; $i<32; $i+=4) | ||
128 | { | ||
129 | &comment("Round $i"); | ||
130 | |||
131 | &mov("eax",&DWP($i,$a,"",0)); # *a | ||
132 | &mul($w); # *a * w | ||
133 | &add("eax",$c); # L(t)+=c | ||
134 | # XXX | ||
135 | |||
136 | &adc("edx",0); # H(t)+=carry | ||
137 | &mov(&DWP($i,$r,"",0),"eax"); # *r= L(t); | ||
138 | |||
139 | &mov($c,"edx"); # c= H(t); | ||
140 | } | ||
141 | |||
142 | &comment(""); | ||
143 | &add($a,32); | ||
144 | &add($r,32); | ||
145 | &sub($num,8); | ||
146 | &jz(&label("mw_finish")); | ||
147 | &jmp(&label("mw_loop")); | ||
148 | |||
149 | &set_label("mw_finish",0); | ||
150 | &mov($num,&wparam(2)); # get num | ||
151 | &and($num,7); | ||
152 | &jnz(&label("mw_finish2")); | ||
153 | &jmp(&label("mw_end")); | ||
154 | |||
155 | &set_label("mw_finish2",1); | ||
156 | for ($i=0; $i<7; $i++) | ||
157 | { | ||
158 | &comment("Tail Round $i"); | ||
159 | &mov("eax",&DWP($i*4,$a,"",0));# *a | ||
160 | &mul($w); # *a * w | ||
161 | &add("eax",$c); # L(t)+=c | ||
162 | # XXX | ||
163 | &adc("edx",0); # H(t)+=carry | ||
164 | &mov(&DWP($i*4,$r,"",0),"eax");# *r= L(t); | ||
165 | &mov($c,"edx"); # c= H(t); | ||
166 | &dec($num) if ($i != 7-1); | ||
167 | &jz(&label("mw_end")) if ($i != 7-1); | ||
168 | } | ||
169 | &set_label("mw_end",0); | ||
170 | &mov("eax",$c); | ||
171 | |||
172 | &function_end($name); | ||
173 | } | ||
174 | |||
175 | sub bn_sqr_words | ||
176 | { | ||
177 | local($name)=@_; | ||
178 | |||
179 | &function_begin($name,""); | ||
180 | |||
181 | &comment(""); | ||
182 | $r="esi"; | ||
183 | $a="edi"; | ||
184 | $num="ebx"; | ||
185 | |||
186 | &mov($r,&wparam(0)); # | ||
187 | &mov($a,&wparam(1)); # | ||
188 | &mov($num,&wparam(2)); # | ||
189 | |||
190 | &and($num,0xfffffff8); # num / 8 | ||
191 | &jz(&label("sw_finish")); | ||
192 | |||
193 | &set_label("sw_loop",0); | ||
194 | for ($i=0; $i<32; $i+=4) | ||
195 | { | ||
196 | &comment("Round $i"); | ||
197 | &mov("eax",&DWP($i,$a,"",0)); # *a | ||
198 | # XXX | ||
199 | &mul("eax"); # *a * *a | ||
200 | &mov(&DWP($i*2,$r,"",0),"eax"); # | ||
201 | &mov(&DWP($i*2+4,$r,"",0),"edx");# | ||
202 | } | ||
203 | |||
204 | &comment(""); | ||
205 | &add($a,32); | ||
206 | &add($r,64); | ||
207 | &sub($num,8); | ||
208 | &jnz(&label("sw_loop")); | ||
209 | |||
210 | &set_label("sw_finish",0); | ||
211 | &mov($num,&wparam(2)); # get num | ||
212 | &and($num,7); | ||
213 | &jz(&label("sw_end")); | ||
214 | |||
215 | for ($i=0; $i<7; $i++) | ||
216 | { | ||
217 | &comment("Tail Round $i"); | ||
218 | &mov("eax",&DWP($i*4,$a,"",0)); # *a | ||
219 | # XXX | ||
220 | &mul("eax"); # *a * *a | ||
221 | &mov(&DWP($i*8,$r,"",0),"eax"); # | ||
222 | &dec($num) if ($i != 7-1); | ||
223 | &mov(&DWP($i*8+4,$r,"",0),"edx"); | ||
224 | &jz(&label("sw_end")) if ($i != 7-1); | ||
225 | } | ||
226 | &set_label("sw_end",0); | ||
227 | |||
228 | &function_end($name); | ||
229 | } | ||
230 | |||
231 | sub bn_div64 | ||
232 | { | ||
233 | local($name)=@_; | ||
234 | |||
235 | &function_begin($name,""); | ||
236 | &mov("edx",&wparam(0)); # | ||
237 | &mov("eax",&wparam(1)); # | ||
238 | &mov("ebx",&wparam(2)); # | ||
239 | &div("ebx"); | ||
240 | &function_end($name); | ||
241 | } | ||
242 | |||
243 | sub bn_add_words | ||
244 | { | ||
245 | local($name)=@_; | ||
246 | |||
247 | &function_begin($name,""); | ||
248 | |||
249 | &comment(""); | ||
250 | $a="esi"; | ||
251 | $b="edi"; | ||
252 | $c="eax"; | ||
253 | $r="ebx"; | ||
254 | $tmp1="ecx"; | ||
255 | $tmp2="edx"; | ||
256 | $num="ebp"; | ||
257 | |||
258 | &mov($r,&wparam(0)); # get r | ||
259 | &mov($a,&wparam(1)); # get a | ||
260 | &mov($b,&wparam(2)); # get b | ||
261 | &mov($num,&wparam(3)); # get num | ||
262 | &xor($c,$c); # clear carry | ||
263 | &and($num,0xfffffff8); # num / 8 | ||
264 | |||
265 | &jz(&label("aw_finish")); | ||
266 | |||
267 | &set_label("aw_loop",0); | ||
268 | for ($i=0; $i<8; $i++) | ||
269 | { | ||
270 | &comment("Round $i"); | ||
271 | |||
272 | &mov($tmp1,&DWP($i*4,$a,"",0)); # *a | ||
273 | &mov($tmp2,&DWP($i*4,$b,"",0)); # *b | ||
274 | &add($tmp1,$c); | ||
275 | &mov($c,0); | ||
276 | &adc($c,$c); | ||
277 | &add($tmp1,$tmp2); | ||
278 | &adc($c,0); | ||
279 | &mov(&DWP($i*4,$r,"",0),$tmp1); # *r | ||
280 | } | ||
281 | |||
282 | &comment(""); | ||
283 | &add($a,32); | ||
284 | &add($b,32); | ||
285 | &add($r,32); | ||
286 | &sub($num,8); | ||
287 | &jnz(&label("aw_loop")); | ||
288 | |||
289 | &set_label("aw_finish",0); | ||
290 | &mov($num,&wparam(3)); # get num | ||
291 | &and($num,7); | ||
292 | &jz(&label("aw_end")); | ||
293 | |||
294 | for ($i=0; $i<7; $i++) | ||
295 | { | ||
296 | &comment("Tail Round $i"); | ||
297 | &mov($tmp1,&DWP($i*4,$a,"",0)); # *a | ||
298 | &mov($tmp2,&DWP($i*4,$b,"",0));# *b | ||
299 | &add($tmp1,$c); | ||
300 | &mov($c,0); | ||
301 | &adc($c,$c); | ||
302 | &add($tmp1,$tmp2); | ||
303 | &adc($c,0); | ||
304 | &dec($num) if ($i != 6); | ||
305 | &mov(&DWP($i*4,$r,"",0),$tmp1); # *a | ||
306 | &jz(&label("aw_end")) if ($i != 6); | ||
307 | } | ||
308 | &set_label("aw_end",0); | ||
309 | |||
310 | &mov("eax",$c); | ||
311 | |||
312 | &function_end($name); | ||
313 | } | ||
314 | |||
diff --git a/src/lib/libcrypto/bn/asm/pa-risc2.s b/src/lib/libcrypto/bn/asm/pa-risc2.s new file mode 100644 index 0000000000..c2725996a4 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/pa-risc2.s | |||
@@ -0,0 +1,416 @@ | |||
1 | .SPACE $PRIVATE$ | ||
2 | .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31 | ||
3 | .SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82 | ||
4 | .SPACE $TEXT$ | ||
5 | .SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44 | ||
6 | .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY | ||
7 | .IMPORT $global$,DATA | ||
8 | .IMPORT $$dyncall,MILLICODE | ||
9 | ; gcc_compiled.: | ||
10 | .SPACE $TEXT$ | ||
11 | .SUBSPA $CODE$ | ||
12 | |||
13 | .align 4 | ||
14 | .EXPORT bn_mul_add_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR | ||
15 | bn_mul_add_words | ||
16 | .PROC | ||
17 | .CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=4 | ||
18 | .ENTRY | ||
19 | stw %r2,-20(0,%r30) | ||
20 | stwm %r4,64(0,%r30) | ||
21 | copy %r24,%r31 | ||
22 | stw %r3,-60(0,%r30) | ||
23 | ldi 0,%r20 | ||
24 | ldo 12(%r26),%r2 | ||
25 | stw %r23,-16(0,%r30) | ||
26 | copy %r25,%r3 | ||
27 | ldo 12(%r3),%r1 | ||
28 | fldws -16(0,%r30),%fr8L | ||
29 | L$0010 | ||
30 | copy %r20,%r25 | ||
31 | ldi 0,%r24 | ||
32 | fldws 0(0,%r3),%fr9L | ||
33 | ldw 0(0,%r26),%r19 | ||
34 | xmpyu %fr8L,%fr9L,%fr9 | ||
35 | fstds %fr9,-16(0,%r30) | ||
36 | copy %r19,%r23 | ||
37 | ldw -16(0,%r30),%r28 | ||
38 | ldw -12(0,%r30),%r29 | ||
39 | ldi 0,%r22 | ||
40 | add %r23,%r29,%r29 | ||
41 | addc %r22,%r28,%r28 | ||
42 | add %r25,%r29,%r29 | ||
43 | addc %r24,%r28,%r28 | ||
44 | copy %r28,%r21 | ||
45 | ldi 0,%r20 | ||
46 | copy %r21,%r20 | ||
47 | addib,= -1,%r31,L$0011 | ||
48 | stw %r29,0(0,%r26) | ||
49 | copy %r20,%r25 | ||
50 | ldi 0,%r24 | ||
51 | fldws -8(0,%r1),%fr9L | ||
52 | ldw -8(0,%r2),%r19 | ||
53 | xmpyu %fr8L,%fr9L,%fr9 | ||
54 | fstds %fr9,-16(0,%r30) | ||
55 | copy %r19,%r23 | ||
56 | ldw -16(0,%r30),%r28 | ||
57 | ldw -12(0,%r30),%r29 | ||
58 | ldi 0,%r22 | ||
59 | add %r23,%r29,%r29 | ||
60 | addc %r22,%r28,%r28 | ||
61 | add %r25,%r29,%r29 | ||
62 | addc %r24,%r28,%r28 | ||
63 | copy %r28,%r21 | ||
64 | ldi 0,%r20 | ||
65 | copy %r21,%r20 | ||
66 | addib,= -1,%r31,L$0011 | ||
67 | stw %r29,-8(0,%r2) | ||
68 | copy %r20,%r25 | ||
69 | ldi 0,%r24 | ||
70 | fldws -4(0,%r1),%fr9L | ||
71 | ldw -4(0,%r2),%r19 | ||
72 | xmpyu %fr8L,%fr9L,%fr9 | ||
73 | fstds %fr9,-16(0,%r30) | ||
74 | copy %r19,%r23 | ||
75 | ldw -16(0,%r30),%r28 | ||
76 | ldw -12(0,%r30),%r29 | ||
77 | ldi 0,%r22 | ||
78 | add %r23,%r29,%r29 | ||
79 | addc %r22,%r28,%r28 | ||
80 | add %r25,%r29,%r29 | ||
81 | addc %r24,%r28,%r28 | ||
82 | copy %r28,%r21 | ||
83 | ldi 0,%r20 | ||
84 | copy %r21,%r20 | ||
85 | addib,= -1,%r31,L$0011 | ||
86 | stw %r29,-4(0,%r2) | ||
87 | copy %r20,%r25 | ||
88 | ldi 0,%r24 | ||
89 | fldws 0(0,%r1),%fr9L | ||
90 | ldw 0(0,%r2),%r19 | ||
91 | xmpyu %fr8L,%fr9L,%fr9 | ||
92 | fstds %fr9,-16(0,%r30) | ||
93 | copy %r19,%r23 | ||
94 | ldw -16(0,%r30),%r28 | ||
95 | ldw -12(0,%r30),%r29 | ||
96 | ldi 0,%r22 | ||
97 | add %r23,%r29,%r29 | ||
98 | addc %r22,%r28,%r28 | ||
99 | add %r25,%r29,%r29 | ||
100 | addc %r24,%r28,%r28 | ||
101 | copy %r28,%r21 | ||
102 | ldi 0,%r20 | ||
103 | copy %r21,%r20 | ||
104 | addib,= -1,%r31,L$0011 | ||
105 | stw %r29,0(0,%r2) | ||
106 | ldo 16(%r1),%r1 | ||
107 | ldo 16(%r3),%r3 | ||
108 | ldo 16(%r2),%r2 | ||
109 | bl L$0010,0 | ||
110 | ldo 16(%r26),%r26 | ||
111 | L$0011 | ||
112 | copy %r20,%r28 | ||
113 | ldw -84(0,%r30),%r2 | ||
114 | ldw -60(0,%r30),%r3 | ||
115 | bv 0(%r2) | ||
116 | ldwm -64(0,%r30),%r4 | ||
117 | .EXIT | ||
118 | .PROCEND | ||
119 | .align 4 | ||
120 | .EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR | ||
121 | bn_mul_words | ||
122 | .PROC | ||
123 | .CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3 | ||
124 | .ENTRY | ||
125 | stw %r2,-20(0,%r30) | ||
126 | copy %r25,%r2 | ||
127 | stwm %r4,64(0,%r30) | ||
128 | copy %r24,%r19 | ||
129 | ldi 0,%r28 | ||
130 | stw %r23,-16(0,%r30) | ||
131 | ldo 12(%r26),%r31 | ||
132 | ldo 12(%r2),%r29 | ||
133 | fldws -16(0,%r30),%fr8L | ||
134 | L$0026 | ||
135 | fldws 0(0,%r2),%fr9L | ||
136 | xmpyu %fr8L,%fr9L,%fr9 | ||
137 | fstds %fr9,-16(0,%r30) | ||
138 | copy %r28,%r21 | ||
139 | ldi 0,%r20 | ||
140 | ldw -16(0,%r30),%r24 | ||
141 | ldw -12(0,%r30),%r25 | ||
142 | add %r21,%r25,%r25 | ||
143 | addc %r20,%r24,%r24 | ||
144 | copy %r24,%r23 | ||
145 | ldi 0,%r22 | ||
146 | copy %r23,%r28 | ||
147 | addib,= -1,%r19,L$0027 | ||
148 | stw %r25,0(0,%r26) | ||
149 | fldws -8(0,%r29),%fr9L | ||
150 | xmpyu %fr8L,%fr9L,%fr9 | ||
151 | fstds %fr9,-16(0,%r30) | ||
152 | copy %r28,%r21 | ||
153 | ldi 0,%r20 | ||
154 | ldw -16(0,%r30),%r24 | ||
155 | ldw -12(0,%r30),%r25 | ||
156 | add %r21,%r25,%r25 | ||
157 | addc %r20,%r24,%r24 | ||
158 | copy %r24,%r23 | ||
159 | ldi 0,%r22 | ||
160 | copy %r23,%r28 | ||
161 | addib,= -1,%r19,L$0027 | ||
162 | stw %r25,-8(0,%r31) | ||
163 | fldws -4(0,%r29),%fr9L | ||
164 | xmpyu %fr8L,%fr9L,%fr9 | ||
165 | fstds %fr9,-16(0,%r30) | ||
166 | copy %r28,%r21 | ||
167 | ldi 0,%r20 | ||
168 | ldw -16(0,%r30),%r24 | ||
169 | ldw -12(0,%r30),%r25 | ||
170 | add %r21,%r25,%r25 | ||
171 | addc %r20,%r24,%r24 | ||
172 | copy %r24,%r23 | ||
173 | ldi 0,%r22 | ||
174 | copy %r23,%r28 | ||
175 | addib,= -1,%r19,L$0027 | ||
176 | stw %r25,-4(0,%r31) | ||
177 | fldws 0(0,%r29),%fr9L | ||
178 | xmpyu %fr8L,%fr9L,%fr9 | ||
179 | fstds %fr9,-16(0,%r30) | ||
180 | copy %r28,%r21 | ||
181 | ldi 0,%r20 | ||
182 | ldw -16(0,%r30),%r24 | ||
183 | ldw -12(0,%r30),%r25 | ||
184 | add %r21,%r25,%r25 | ||
185 | addc %r20,%r24,%r24 | ||
186 | copy %r24,%r23 | ||
187 | ldi 0,%r22 | ||
188 | copy %r23,%r28 | ||
189 | addib,= -1,%r19,L$0027 | ||
190 | stw %r25,0(0,%r31) | ||
191 | ldo 16(%r29),%r29 | ||
192 | ldo 16(%r2),%r2 | ||
193 | ldo 16(%r31),%r31 | ||
194 | bl L$0026,0 | ||
195 | ldo 16(%r26),%r26 | ||
196 | L$0027 | ||
197 | ldw -84(0,%r30),%r2 | ||
198 | bv 0(%r2) | ||
199 | ldwm -64(0,%r30),%r4 | ||
200 | .EXIT | ||
201 | .PROCEND | ||
202 | .align 4 | ||
203 | .EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR | ||
204 | bn_sqr_words | ||
205 | .PROC | ||
206 | .CALLINFO FRAME=0,NO_CALLS | ||
207 | .ENTRY | ||
208 | ldo 28(%r26),%r19 | ||
209 | ldo 12(%r25),%r28 | ||
210 | L$0042 | ||
211 | fldws 0(0,%r25),%fr8L | ||
212 | fldws 0(0,%r25),%fr8R | ||
213 | xmpyu %fr8L,%fr8R,%fr8 | ||
214 | fstds %fr8,-16(0,%r30) | ||
215 | ldw -16(0,%r30),%r22 | ||
216 | ldw -12(0,%r30),%r23 | ||
217 | stw %r23,0(0,%r26) | ||
218 | copy %r22,%r21 | ||
219 | ldi 0,%r20 | ||
220 | addib,= -1,%r24,L$0049 | ||
221 | stw %r21,-24(0,%r19) | ||
222 | fldws -8(0,%r28),%fr8L | ||
223 | fldws -8(0,%r28),%fr8R | ||
224 | xmpyu %fr8L,%fr8R,%fr8 | ||
225 | fstds %fr8,-16(0,%r30) | ||
226 | ldw -16(0,%r30),%r22 | ||
227 | ldw -12(0,%r30),%r23 | ||
228 | stw %r23,-20(0,%r19) | ||
229 | copy %r22,%r21 | ||
230 | ldi 0,%r20 | ||
231 | addib,= -1,%r24,L$0049 | ||
232 | stw %r21,-16(0,%r19) | ||
233 | fldws -4(0,%r28),%fr8L | ||
234 | fldws -4(0,%r28),%fr8R | ||
235 | xmpyu %fr8L,%fr8R,%fr8 | ||
236 | fstds %fr8,-16(0,%r30) | ||
237 | ldw -16(0,%r30),%r22 | ||
238 | ldw -12(0,%r30),%r23 | ||
239 | stw %r23,-12(0,%r19) | ||
240 | copy %r22,%r21 | ||
241 | ldi 0,%r20 | ||
242 | addib,= -1,%r24,L$0049 | ||
243 | stw %r21,-8(0,%r19) | ||
244 | fldws 0(0,%r28),%fr8L | ||
245 | fldws 0(0,%r28),%fr8R | ||
246 | xmpyu %fr8L,%fr8R,%fr8 | ||
247 | fstds %fr8,-16(0,%r30) | ||
248 | ldw -16(0,%r30),%r22 | ||
249 | ldw -12(0,%r30),%r23 | ||
250 | stw %r23,-4(0,%r19) | ||
251 | copy %r22,%r21 | ||
252 | ldi 0,%r20 | ||
253 | addib,= -1,%r24,L$0049 | ||
254 | stw %r21,0(0,%r19) | ||
255 | ldo 16(%r28),%r28 | ||
256 | ldo 16(%r25),%r25 | ||
257 | ldo 32(%r19),%r19 | ||
258 | bl L$0042,0 | ||
259 | ldo 32(%r26),%r26 | ||
260 | L$0049 | ||
261 | bv,n 0(%r2) | ||
262 | .EXIT | ||
263 | .PROCEND | ||
264 | .IMPORT BN_num_bits_word,CODE | ||
265 | .IMPORT fprintf,CODE | ||
266 | .IMPORT __iob,DATA | ||
267 | .SPACE $TEXT$ | ||
268 | .SUBSPA $LIT$ | ||
269 | |||
270 | .align 4 | ||
271 | L$C0000 | ||
272 | .STRING "Division would overflow (%d)\x0a\x00" | ||
273 | .IMPORT abort,CODE | ||
274 | .SPACE $TEXT$ | ||
275 | .SUBSPA $CODE$ | ||
276 | |||
277 | .align 4 | ||
278 | .EXPORT bn_div64,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR | ||
279 | bn_div64 | ||
280 | .PROC | ||
281 | .CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=8 | ||
282 | .ENTRY | ||
283 | stw %r2,-20(0,%r30) | ||
284 | stwm %r8,128(0,%r30) | ||
285 | stw %r7,-124(0,%r30) | ||
286 | stw %r4,-112(0,%r30) | ||
287 | stw %r3,-108(0,%r30) | ||
288 | copy %r26,%r3 | ||
289 | copy %r25,%r4 | ||
290 | stw %r6,-120(0,%r30) | ||
291 | ldi 0,%r7 | ||
292 | stw %r5,-116(0,%r30) | ||
293 | movb,<> %r24,%r5,L$0051 | ||
294 | ldi 2,%r6 | ||
295 | bl L$0068,0 | ||
296 | ldi -1,%r28 | ||
297 | L$0051 | ||
298 | .CALL ARGW0=GR | ||
299 | bl BN_num_bits_word,%r2 | ||
300 | copy %r5,%r26 | ||
301 | copy %r28,%r24 | ||
302 | ldi 32,%r19 | ||
303 | comb,= %r19,%r24,L$0052 | ||
304 | subi 31,%r24,%r19 | ||
305 | mtsar %r19 | ||
306 | zvdepi 1,32,%r19 | ||
307 | comb,>>= %r19,%r3,L$0052 | ||
308 | addil LR'__iob-$global$+32,%r27 | ||
309 | ldo RR'__iob-$global$+32(%r1),%r26 | ||
310 | ldil LR'L$C0000,%r25 | ||
311 | .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR | ||
312 | bl fprintf,%r2 | ||
313 | ldo RR'L$C0000(%r25),%r25 | ||
314 | .CALL | ||
315 | bl abort,%r2 | ||
316 | nop | ||
317 | L$0052 | ||
318 | comb,>> %r5,%r3,L$0053 | ||
319 | subi 32,%r24,%r24 | ||
320 | sub %r3,%r5,%r3 | ||
321 | L$0053 | ||
322 | comib,= 0,%r24,L$0054 | ||
323 | subi 31,%r24,%r19 | ||
324 | mtsar %r19 | ||
325 | zvdep %r5,32,%r5 | ||
326 | zvdep %r3,32,%r21 | ||
327 | subi 32,%r24,%r20 | ||
328 | mtsar %r20 | ||
329 | vshd 0,%r4,%r20 | ||
330 | or %r21,%r20,%r3 | ||
331 | mtsar %r19 | ||
332 | zvdep %r4,32,%r4 | ||
333 | L$0054 | ||
334 | extru %r5,15,16,%r23 | ||
335 | extru %r5,31,16,%r28 | ||
336 | L$0055 | ||
337 | extru %r3,15,16,%r19 | ||
338 | comb,<> %r23,%r19,L$0058 | ||
339 | copy %r3,%r26 | ||
340 | bl L$0059,0 | ||
341 | zdepi -1,31,16,%r29 | ||
342 | L$0058 | ||
343 | .IMPORT $$divU,MILLICODE | ||
344 | bl $$divU,%r31 | ||
345 | copy %r23,%r25 | ||
346 | L$0059 | ||
347 | stw %r29,-16(0,%r30) | ||
348 | fldws -16(0,%r30),%fr10L | ||
349 | stw %r28,-16(0,%r30) | ||
350 | fldws -16(0,%r30),%fr10R | ||
351 | stw %r23,-16(0,%r30) | ||
352 | xmpyu %fr10L,%fr10R,%fr8 | ||
353 | fldws -16(0,%r30),%fr10R | ||
354 | fstws %fr8R,-16(0,%r30) | ||
355 | xmpyu %fr10L,%fr10R,%fr9 | ||
356 | ldw -16(0,%r30),%r8 | ||
357 | fstws %fr9R,-16(0,%r30) | ||
358 | copy %r8,%r22 | ||
359 | ldw -16(0,%r30),%r8 | ||
360 | extru %r4,15,16,%r24 | ||
361 | copy %r8,%r21 | ||
362 | L$0060 | ||
363 | sub %r3,%r21,%r20 | ||
364 | copy %r20,%r19 | ||
365 | depi 0,31,16,%r19 | ||
366 | comib,<> 0,%r19,L$0061 | ||
367 | zdep %r20,15,16,%r19 | ||
368 | addl %r19,%r24,%r19 | ||
369 | comb,>>= %r19,%r22,L$0061 | ||
370 | sub %r22,%r28,%r22 | ||
371 | sub %r21,%r23,%r21 | ||
372 | bl L$0060,0 | ||
373 | ldo -1(%r29),%r29 | ||
374 | L$0061 | ||
375 | stw %r29,-16(0,%r30) | ||
376 | fldws -16(0,%r30),%fr10L | ||
377 | stw %r28,-16(0,%r30) | ||
378 | fldws -16(0,%r30),%fr10R | ||
379 | xmpyu %fr10L,%fr10R,%fr8 | ||
380 | fstws %fr8R,-16(0,%r30) | ||
381 | ldw -16(0,%r30),%r8 | ||
382 | stw %r23,-16(0,%r30) | ||
383 | fldws -16(0,%r30),%fr10R | ||
384 | copy %r8,%r19 | ||
385 | xmpyu %fr10L,%fr10R,%fr8 | ||
386 | fstws %fr8R,-16(0,%r30) | ||
387 | extru %r19,15,16,%r20 | ||
388 | ldw -16(0,%r30),%r8 | ||
389 | zdep %r19,15,16,%r19 | ||
390 | addl %r8,%r20,%r20 | ||
391 | comclr,<<= %r19,%r4,0 | ||
392 | addi 1,%r20,%r20 | ||
393 | comb,<<= %r20,%r3,L$0066 | ||
394 | sub %r4,%r19,%r4 | ||
395 | addl %r3,%r5,%r3 | ||
396 | ldo -1(%r29),%r29 | ||
397 | L$0066 | ||
398 | addib,= -1,%r6,L$0056 | ||
399 | sub %r3,%r20,%r3 | ||
400 | zdep %r29,15,16,%r7 | ||
401 | shd %r3,%r4,16,%r3 | ||
402 | bl L$0055,0 | ||
403 | zdep %r4,15,16,%r4 | ||
404 | L$0056 | ||
405 | or %r7,%r29,%r28 | ||
406 | L$0068 | ||
407 | ldw -148(0,%r30),%r2 | ||
408 | ldw -124(0,%r30),%r7 | ||
409 | ldw -120(0,%r30),%r6 | ||
410 | ldw -116(0,%r30),%r5 | ||
411 | ldw -112(0,%r30),%r4 | ||
412 | ldw -108(0,%r30),%r3 | ||
413 | bv 0(%r2) | ||
414 | ldwm -128(0,%r30),%r8 | ||
415 | .EXIT | ||
416 | .PROCEND | ||