summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bn/asm
diff options
context:
space:
mode:
authorryker <>1998-10-05 20:13:14 +0000
committerryker <>1998-10-05 20:13:14 +0000
commitaeeae06a79815dc190061534d47236cec09f9e32 (patch)
tree851692b9c2f9c04f077666855641900f19fdb217 /src/lib/libcrypto/bn/asm
parenta4f79641824cbf9f60ca9d1168d1fcc46717a82a (diff)
downloadopenbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.gz
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.bz2
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.zip
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs. Note that routines such as sslv2_init and friends that use RSA will not work due to lack of RSA in this library. Needs documentation and help from ports for easy upgrade to full functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/bn/asm')
-rw-r--r--src/lib/libcrypto/bn/asm/bn-586.pl314
-rw-r--r--src/lib/libcrypto/bn/asm/pa-risc2.s416
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
6push(@INC,"perlasm","../../perlasm");
7require "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
19sub 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
102sub 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
175sub 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
231sub 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
243sub 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
15bn_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
29L$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
111L$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
121bn_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
134L$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
196L$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
204bn_sqr_words
205 .PROC
206 .CALLINFO FRAME=0,NO_CALLS
207 .ENTRY
208 ldo 28(%r26),%r19
209 ldo 12(%r25),%r28
210L$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
260L$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
271L$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
279bn_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
297L$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
317L$0052
318 comb,>> %r5,%r3,L$0053
319 subi 32,%r24,%r24
320 sub %r3,%r5,%r3
321L$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
333L$0054
334 extru %r5,15,16,%r23
335 extru %r5,31,16,%r28
336L$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
342L$0058
343 .IMPORT $$divU,MILLICODE
344 bl $$divU,%r31
345 copy %r23,%r25
346L$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
362L$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
374L$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
397L$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
404L$0056
405 or %r7,%r29,%r28
406L$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