diff options
Diffstat (limited to 'src/lib/libcrypto/bn/asm/bn-alpha.pl')
-rw-r--r-- | src/lib/libcrypto/bn/asm/bn-alpha.pl | 571 |
1 files changed, 571 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bn/asm/bn-alpha.pl b/src/lib/libcrypto/bn/asm/bn-alpha.pl new file mode 100644 index 0000000000..302edf2376 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/bn-alpha.pl | |||
@@ -0,0 +1,571 @@ | |||
1 | #!/usr/local/bin/perl | ||
2 | # I have this in perl so I can use more usefull register names and then convert | ||
3 | # them into alpha registers. | ||
4 | # | ||
5 | |||
6 | $d=&data(); | ||
7 | $d =~ s/CC/0/g; | ||
8 | $d =~ s/R1/1/g; | ||
9 | $d =~ s/R2/2/g; | ||
10 | $d =~ s/R3/3/g; | ||
11 | $d =~ s/R4/4/g; | ||
12 | $d =~ s/L1/5/g; | ||
13 | $d =~ s/L2/6/g; | ||
14 | $d =~ s/L3/7/g; | ||
15 | $d =~ s/L4/8/g; | ||
16 | $d =~ s/O1/22/g; | ||
17 | $d =~ s/O2/23/g; | ||
18 | $d =~ s/O3/24/g; | ||
19 | $d =~ s/O4/25/g; | ||
20 | $d =~ s/A1/20/g; | ||
21 | $d =~ s/A2/21/g; | ||
22 | $d =~ s/A3/27/g; | ||
23 | $d =~ s/A4/28/g; | ||
24 | if (0){ | ||
25 | } | ||
26 | |||
27 | print $d; | ||
28 | |||
29 | sub data | ||
30 | { | ||
31 | local($data)=<<'EOF'; | ||
32 | |||
33 | # DEC Alpha assember | ||
34 | # The bn_div_words is actually gcc output but the other parts are hand done. | ||
35 | # Thanks to tzeruch@ceddec.com for sending me the gcc output for | ||
36 | # bn_div_words. | ||
37 | # I've gone back and re-done most of routines. | ||
38 | # The key thing to remeber for the 164 CPU is that while a | ||
39 | # multiply operation takes 8 cycles, another one can only be issued | ||
40 | # after 4 cycles have elapsed. I've done modification to help | ||
41 | # improve this. Also, normally, a ld instruction will not be available | ||
42 | # for about 3 cycles. | ||
43 | .file 1 "bn_asm.c" | ||
44 | .set noat | ||
45 | gcc2_compiled.: | ||
46 | __gnu_compiled_c: | ||
47 | .text | ||
48 | .align 3 | ||
49 | .globl bn_mul_add_words | ||
50 | .ent bn_mul_add_words | ||
51 | bn_mul_add_words: | ||
52 | bn_mul_add_words..ng: | ||
53 | .frame $30,0,$26,0 | ||
54 | .prologue 0 | ||
55 | .align 5 | ||
56 | subq $18,4,$18 | ||
57 | bis $31,$31,$CC | ||
58 | blt $18,$43 # if we are -1, -2, -3 or -4 goto tail code | ||
59 | ldq $A1,0($17) # 1 1 | ||
60 | ldq $R1,0($16) # 1 1 | ||
61 | .align 3 | ||
62 | $42: | ||
63 | mulq $A1,$19,$L1 # 1 2 1 ###### | ||
64 | ldq $A2,8($17) # 2 1 | ||
65 | ldq $R2,8($16) # 2 1 | ||
66 | umulh $A1,$19,$A1 # 1 2 ###### | ||
67 | ldq $A3,16($17) # 3 1 | ||
68 | ldq $R3,16($16) # 3 1 | ||
69 | mulq $A2,$19,$L2 # 2 2 1 ###### | ||
70 | ldq $A4,24($17) # 4 1 | ||
71 | addq $R1,$L1,$R1 # 1 2 2 | ||
72 | ldq $R4,24($16) # 4 1 | ||
73 | umulh $A2,$19,$A2 # 2 2 ###### | ||
74 | cmpult $R1,$L1,$O1 # 1 2 3 1 | ||
75 | addq $A1,$O1,$A1 # 1 3 1 | ||
76 | addq $R1,$CC,$R1 # 1 2 3 1 | ||
77 | mulq $A3,$19,$L3 # 3 2 1 ###### | ||
78 | cmpult $R1,$CC,$CC # 1 2 3 2 | ||
79 | addq $R2,$L2,$R2 # 2 2 2 | ||
80 | addq $A1,$CC,$CC # 1 3 2 | ||
81 | cmpult $R2,$L2,$O2 # 2 2 3 1 | ||
82 | addq $A2,$O2,$A2 # 2 3 1 | ||
83 | umulh $A3,$19,$A3 # 3 2 ###### | ||
84 | addq $R2,$CC,$R2 # 2 2 3 1 | ||
85 | cmpult $R2,$CC,$CC # 2 2 3 2 | ||
86 | subq $18,4,$18 | ||
87 | mulq $A4,$19,$L4 # 4 2 1 ###### | ||
88 | addq $A2,$CC,$CC # 2 3 2 | ||
89 | addq $R3,$L3,$R3 # 3 2 2 | ||
90 | addq $16,32,$16 | ||
91 | cmpult $R3,$L3,$O3 # 3 2 3 1 | ||
92 | stq $R1,-32($16) # 1 2 4 | ||
93 | umulh $A4,$19,$A4 # 4 2 ###### | ||
94 | addq $A3,$O3,$A3 # 3 3 1 | ||
95 | addq $R3,$CC,$R3 # 3 2 3 1 | ||
96 | stq $R2,-24($16) # 2 2 4 | ||
97 | cmpult $R3,$CC,$CC # 3 2 3 2 | ||
98 | stq $R3,-16($16) # 3 2 4 | ||
99 | addq $R4,$L4,$R4 # 4 2 2 | ||
100 | addq $A3,$CC,$CC # 3 3 2 | ||
101 | cmpult $R4,$L4,$O4 # 4 2 3 1 | ||
102 | addq $17,32,$17 | ||
103 | addq $A4,$O4,$A4 # 4 3 1 | ||
104 | addq $R4,$CC,$R4 # 4 2 3 1 | ||
105 | cmpult $R4,$CC,$CC # 4 2 3 2 | ||
106 | stq $R4,-8($16) # 4 2 4 | ||
107 | addq $A4,$CC,$CC # 4 3 2 | ||
108 | blt $18,$43 | ||
109 | |||
110 | ldq $A1,0($17) # 1 1 | ||
111 | ldq $R1,0($16) # 1 1 | ||
112 | |||
113 | br $42 | ||
114 | |||
115 | .align 4 | ||
116 | $45: | ||
117 | ldq $A1,0($17) # 4 1 | ||
118 | ldq $R1,0($16) # 4 1 | ||
119 | mulq $A1,$19,$L1 # 4 2 1 | ||
120 | subq $18,1,$18 | ||
121 | addq $16,8,$16 | ||
122 | addq $17,8,$17 | ||
123 | umulh $A1,$19,$A1 # 4 2 | ||
124 | addq $R1,$L1,$R1 # 4 2 2 | ||
125 | cmpult $R1,$L1,$O1 # 4 2 3 1 | ||
126 | addq $A1,$O1,$A1 # 4 3 1 | ||
127 | addq $R1,$CC,$R1 # 4 2 3 1 | ||
128 | cmpult $R1,$CC,$CC # 4 2 3 2 | ||
129 | addq $A1,$CC,$CC # 4 3 2 | ||
130 | stq $R1,-8($16) # 4 2 4 | ||
131 | bgt $18,$45 | ||
132 | ret $31,($26),1 # else exit | ||
133 | |||
134 | .align 4 | ||
135 | $43: | ||
136 | addq $18,4,$18 | ||
137 | bgt $18,$45 # goto tail code | ||
138 | ret $31,($26),1 # else exit | ||
139 | |||
140 | .end bn_mul_add_words | ||
141 | .align 3 | ||
142 | .globl bn_mul_words | ||
143 | .ent bn_mul_words | ||
144 | bn_mul_words: | ||
145 | bn_mul_words..ng: | ||
146 | .frame $30,0,$26,0 | ||
147 | .prologue 0 | ||
148 | .align 5 | ||
149 | subq $18,4,$18 | ||
150 | bis $31,$31,$CC | ||
151 | blt $18,$143 # if we are -1, -2, -3 or -4 goto tail code | ||
152 | ldq $A1,0($17) # 1 1 | ||
153 | .align 3 | ||
154 | $142: | ||
155 | |||
156 | mulq $A1,$19,$L1 # 1 2 1 ##### | ||
157 | ldq $A2,8($17) # 2 1 | ||
158 | ldq $A3,16($17) # 3 1 | ||
159 | umulh $A1,$19,$A1 # 1 2 ##### | ||
160 | ldq $A4,24($17) # 4 1 | ||
161 | mulq $A2,$19,$L2 # 2 2 1 ##### | ||
162 | addq $L1,$CC,$L1 # 1 2 3 1 | ||
163 | subq $18,4,$18 | ||
164 | cmpult $L1,$CC,$CC # 1 2 3 2 | ||
165 | umulh $A2,$19,$A2 # 2 2 ##### | ||
166 | addq $A1,$CC,$CC # 1 3 2 | ||
167 | addq $17,32,$17 | ||
168 | addq $L2,$CC,$L2 # 2 2 3 1 | ||
169 | mulq $A3,$19,$L3 # 3 2 1 ##### | ||
170 | cmpult $L2,$CC,$CC # 2 2 3 2 | ||
171 | addq $A2,$CC,$CC # 2 3 2 | ||
172 | addq $16,32,$16 | ||
173 | umulh $A3,$19,$A3 # 3 2 ##### | ||
174 | stq $L1,-32($16) # 1 2 4 | ||
175 | mulq $A4,$19,$L4 # 4 2 1 ##### | ||
176 | addq $L3,$CC,$L3 # 3 2 3 1 | ||
177 | stq $L2,-24($16) # 2 2 4 | ||
178 | cmpult $L3,$CC,$CC # 3 2 3 2 | ||
179 | umulh $A4,$19,$A4 # 4 2 ##### | ||
180 | addq $A3,$CC,$CC # 3 3 2 | ||
181 | stq $L3,-16($16) # 3 2 4 | ||
182 | addq $L4,$CC,$L4 # 4 2 3 1 | ||
183 | cmpult $L4,$CC,$CC # 4 2 3 2 | ||
184 | |||
185 | addq $A4,$CC,$CC # 4 3 2 | ||
186 | |||
187 | stq $L4,-8($16) # 4 2 4 | ||
188 | |||
189 | blt $18,$143 | ||
190 | |||
191 | ldq $A1,0($17) # 1 1 | ||
192 | |||
193 | br $142 | ||
194 | |||
195 | .align 4 | ||
196 | $145: | ||
197 | ldq $A1,0($17) # 4 1 | ||
198 | mulq $A1,$19,$L1 # 4 2 1 | ||
199 | subq $18,1,$18 | ||
200 | umulh $A1,$19,$A1 # 4 2 | ||
201 | addq $L1,$CC,$L1 # 4 2 3 1 | ||
202 | addq $16,8,$16 | ||
203 | cmpult $L1,$CC,$CC # 4 2 3 2 | ||
204 | addq $17,8,$17 | ||
205 | addq $A1,$CC,$CC # 4 3 2 | ||
206 | stq $L1,-8($16) # 4 2 4 | ||
207 | |||
208 | bgt $18,$145 | ||
209 | ret $31,($26),1 # else exit | ||
210 | |||
211 | .align 4 | ||
212 | $143: | ||
213 | addq $18,4,$18 | ||
214 | bgt $18,$145 # goto tail code | ||
215 | ret $31,($26),1 # else exit | ||
216 | |||
217 | .end bn_mul_words | ||
218 | .align 3 | ||
219 | .globl bn_sqr_words | ||
220 | .ent bn_sqr_words | ||
221 | bn_sqr_words: | ||
222 | bn_sqr_words..ng: | ||
223 | .frame $30,0,$26,0 | ||
224 | .prologue 0 | ||
225 | |||
226 | subq $18,4,$18 | ||
227 | blt $18,$543 # if we are -1, -2, -3 or -4 goto tail code | ||
228 | ldq $A1,0($17) # 1 1 | ||
229 | .align 3 | ||
230 | $542: | ||
231 | mulq $A1,$A1,$L1 ###### | ||
232 | ldq $A2,8($17) # 1 1 | ||
233 | subq $18,4 | ||
234 | umulh $A1,$A1,$R1 ###### | ||
235 | ldq $A3,16($17) # 1 1 | ||
236 | mulq $A2,$A2,$L2 ###### | ||
237 | ldq $A4,24($17) # 1 1 | ||
238 | stq $L1,0($16) # r[0] | ||
239 | umulh $A2,$A2,$R2 ###### | ||
240 | stq $R1,8($16) # r[1] | ||
241 | mulq $A3,$A3,$L3 ###### | ||
242 | stq $L2,16($16) # r[0] | ||
243 | umulh $A3,$A3,$R3 ###### | ||
244 | stq $R2,24($16) # r[1] | ||
245 | mulq $A4,$A4,$L4 ###### | ||
246 | stq $L3,32($16) # r[0] | ||
247 | umulh $A4,$A4,$R4 ###### | ||
248 | stq $R3,40($16) # r[1] | ||
249 | |||
250 | addq $16,64,$16 | ||
251 | addq $17,32,$17 | ||
252 | stq $L4,-16($16) # r[0] | ||
253 | stq $R4,-8($16) # r[1] | ||
254 | |||
255 | blt $18,$543 | ||
256 | ldq $A1,0($17) # 1 1 | ||
257 | br $542 | ||
258 | |||
259 | $442: | ||
260 | ldq $A1,0($17) # a[0] | ||
261 | mulq $A1,$A1,$L1 # a[0]*w low part r2 | ||
262 | addq $16,16,$16 | ||
263 | addq $17,8,$17 | ||
264 | subq $18,1,$18 | ||
265 | umulh $A1,$A1,$R1 # a[0]*w high part r3 | ||
266 | stq $L1,-16($16) # r[0] | ||
267 | stq $R1,-8($16) # r[1] | ||
268 | |||
269 | bgt $18,$442 | ||
270 | ret $31,($26),1 # else exit | ||
271 | |||
272 | .align 4 | ||
273 | $543: | ||
274 | addq $18,4,$18 | ||
275 | bgt $18,$442 # goto tail code | ||
276 | ret $31,($26),1 # else exit | ||
277 | .end bn_sqr_words | ||
278 | |||
279 | .align 3 | ||
280 | .globl bn_add_words | ||
281 | .ent bn_add_words | ||
282 | bn_add_words: | ||
283 | bn_add_words..ng: | ||
284 | .frame $30,0,$26,0 | ||
285 | .prologue 0 | ||
286 | |||
287 | subq $19,4,$19 | ||
288 | bis $31,$31,$CC # carry = 0 | ||
289 | blt $19,$900 | ||
290 | ldq $L1,0($17) # a[0] | ||
291 | ldq $R1,0($18) # b[1] | ||
292 | .align 3 | ||
293 | $901: | ||
294 | addq $R1,$L1,$R1 # r=a+b; | ||
295 | ldq $L2,8($17) # a[1] | ||
296 | cmpult $R1,$L1,$O1 # did we overflow? | ||
297 | ldq $R2,8($18) # b[1] | ||
298 | addq $R1,$CC,$R1 # c+= overflow | ||
299 | ldq $L3,16($17) # a[2] | ||
300 | cmpult $R1,$CC,$CC # overflow? | ||
301 | ldq $R3,16($18) # b[2] | ||
302 | addq $CC,$O1,$CC | ||
303 | ldq $L4,24($17) # a[3] | ||
304 | addq $R2,$L2,$R2 # r=a+b; | ||
305 | ldq $R4,24($18) # b[3] | ||
306 | cmpult $R2,$L2,$O2 # did we overflow? | ||
307 | addq $R3,$L3,$R3 # r=a+b; | ||
308 | addq $R2,$CC,$R2 # c+= overflow | ||
309 | cmpult $R3,$L3,$O3 # did we overflow? | ||
310 | cmpult $R2,$CC,$CC # overflow? | ||
311 | addq $R4,$L4,$R4 # r=a+b; | ||
312 | addq $CC,$O2,$CC | ||
313 | cmpult $R4,$L4,$O4 # did we overflow? | ||
314 | addq $R3,$CC,$R3 # c+= overflow | ||
315 | stq $R1,0($16) # r[0]=c | ||
316 | cmpult $R3,$CC,$CC # overflow? | ||
317 | stq $R2,8($16) # r[1]=c | ||
318 | addq $CC,$O3,$CC | ||
319 | stq $R3,16($16) # r[2]=c | ||
320 | addq $R4,$CC,$R4 # c+= overflow | ||
321 | subq $19,4,$19 # loop-- | ||
322 | cmpult $R4,$CC,$CC # overflow? | ||
323 | addq $17,32,$17 # a++ | ||
324 | addq $CC,$O4,$CC | ||
325 | stq $R4,24($16) # r[3]=c | ||
326 | addq $18,32,$18 # b++ | ||
327 | addq $16,32,$16 # r++ | ||
328 | |||
329 | blt $19,$900 | ||
330 | ldq $L1,0($17) # a[0] | ||
331 | ldq $R1,0($18) # b[1] | ||
332 | br $901 | ||
333 | .align 4 | ||
334 | $945: | ||
335 | ldq $L1,0($17) # a[0] | ||
336 | ldq $R1,0($18) # b[1] | ||
337 | addq $R1,$L1,$R1 # r=a+b; | ||
338 | subq $19,1,$19 # loop-- | ||
339 | addq $R1,$CC,$R1 # c+= overflow | ||
340 | addq $17,8,$17 # a++ | ||
341 | cmpult $R1,$L1,$O1 # did we overflow? | ||
342 | cmpult $R1,$CC,$CC # overflow? | ||
343 | addq $18,8,$18 # b++ | ||
344 | stq $R1,0($16) # r[0]=c | ||
345 | addq $CC,$O1,$CC | ||
346 | addq $16,8,$16 # r++ | ||
347 | |||
348 | bgt $19,$945 | ||
349 | ret $31,($26),1 # else exit | ||
350 | |||
351 | $900: | ||
352 | addq $19,4,$19 | ||
353 | bgt $19,$945 # goto tail code | ||
354 | ret $31,($26),1 # else exit | ||
355 | .end bn_add_words | ||
356 | |||
357 | .align 3 | ||
358 | .globl bn_sub_words | ||
359 | .ent bn_sub_words | ||
360 | bn_sub_words: | ||
361 | bn_sub_words..ng: | ||
362 | .frame $30,0,$26,0 | ||
363 | .prologue 0 | ||
364 | |||
365 | subq $19,4,$19 | ||
366 | bis $31,$31,$CC # carry = 0 | ||
367 | br $800 | ||
368 | blt $19,$800 | ||
369 | ldq $L1,0($17) # a[0] | ||
370 | ldq $R1,0($18) # b[1] | ||
371 | .align 3 | ||
372 | $801: | ||
373 | addq $R1,$L1,$R1 # r=a+b; | ||
374 | ldq $L2,8($17) # a[1] | ||
375 | cmpult $R1,$L1,$O1 # did we overflow? | ||
376 | ldq $R2,8($18) # b[1] | ||
377 | addq $R1,$CC,$R1 # c+= overflow | ||
378 | ldq $L3,16($17) # a[2] | ||
379 | cmpult $R1,$CC,$CC # overflow? | ||
380 | ldq $R3,16($18) # b[2] | ||
381 | addq $CC,$O1,$CC | ||
382 | ldq $L4,24($17) # a[3] | ||
383 | addq $R2,$L2,$R2 # r=a+b; | ||
384 | ldq $R4,24($18) # b[3] | ||
385 | cmpult $R2,$L2,$O2 # did we overflow? | ||
386 | addq $R3,$L3,$R3 # r=a+b; | ||
387 | addq $R2,$CC,$R2 # c+= overflow | ||
388 | cmpult $R3,$L3,$O3 # did we overflow? | ||
389 | cmpult $R2,$CC,$CC # overflow? | ||
390 | addq $R4,$L4,$R4 # r=a+b; | ||
391 | addq $CC,$O2,$CC | ||
392 | cmpult $R4,$L4,$O4 # did we overflow? | ||
393 | addq $R3,$CC,$R3 # c+= overflow | ||
394 | stq $R1,0($16) # r[0]=c | ||
395 | cmpult $R3,$CC,$CC # overflow? | ||
396 | stq $R2,8($16) # r[1]=c | ||
397 | addq $CC,$O3,$CC | ||
398 | stq $R3,16($16) # r[2]=c | ||
399 | addq $R4,$CC,$R4 # c+= overflow | ||
400 | subq $19,4,$19 # loop-- | ||
401 | cmpult $R4,$CC,$CC # overflow? | ||
402 | addq $17,32,$17 # a++ | ||
403 | addq $CC,$O4,$CC | ||
404 | stq $R4,24($16) # r[3]=c | ||
405 | addq $18,32,$18 # b++ | ||
406 | addq $16,32,$16 # r++ | ||
407 | |||
408 | blt $19,$800 | ||
409 | ldq $L1,0($17) # a[0] | ||
410 | ldq $R1,0($18) # b[1] | ||
411 | br $801 | ||
412 | .align 4 | ||
413 | $845: | ||
414 | ldq $L1,0($17) # a[0] | ||
415 | ldq $R1,0($18) # b[1] | ||
416 | cmpult $L1,$R1,$O1 # will we borrow? | ||
417 | subq $L1,$R1,$R1 # r=a-b; | ||
418 | subq $19,1,$19 # loop-- | ||
419 | cmpult $R1,$CC,$O2 # will we borrow? | ||
420 | subq $R1,$CC,$R1 # c+= overflow | ||
421 | addq $17,8,$17 # a++ | ||
422 | addq $18,8,$18 # b++ | ||
423 | stq $R1,0($16) # r[0]=c | ||
424 | addq $O2,$O1,$CC | ||
425 | addq $16,8,$16 # r++ | ||
426 | |||
427 | bgt $19,$845 | ||
428 | ret $31,($26),1 # else exit | ||
429 | |||
430 | $800: | ||
431 | addq $19,4,$19 | ||
432 | bgt $19,$845 # goto tail code | ||
433 | ret $31,($26),1 # else exit | ||
434 | .end bn_sub_words | ||
435 | |||
436 | # | ||
437 | # What follows was taken directly from the C compiler with a few | ||
438 | # hacks to redo the lables. | ||
439 | # | ||
440 | .text | ||
441 | .align 3 | ||
442 | .globl bn_div_words | ||
443 | .ent bn_div_words | ||
444 | bn_div_words: | ||
445 | ldgp $29,0($27) | ||
446 | bn_div_words..ng: | ||
447 | lda $30,-48($30) | ||
448 | .frame $30,48,$26,0 | ||
449 | stq $26,0($30) | ||
450 | stq $9,8($30) | ||
451 | stq $10,16($30) | ||
452 | stq $11,24($30) | ||
453 | stq $12,32($30) | ||
454 | stq $13,40($30) | ||
455 | .mask 0x4003e00,-48 | ||
456 | .prologue 1 | ||
457 | bis $16,$16,$9 | ||
458 | bis $17,$17,$10 | ||
459 | bis $18,$18,$11 | ||
460 | bis $31,$31,$13 | ||
461 | bis $31,2,$12 | ||
462 | bne $11,$119 | ||
463 | lda $0,-1 | ||
464 | br $31,$136 | ||
465 | .align 4 | ||
466 | $119: | ||
467 | bis $11,$11,$16 | ||
468 | jsr $26,BN_num_bits_word | ||
469 | ldgp $29,0($26) | ||
470 | subq $0,64,$1 | ||
471 | beq $1,$120 | ||
472 | bis $31,1,$1 | ||
473 | sll $1,$0,$1 | ||
474 | cmpule $9,$1,$1 | ||
475 | bne $1,$120 | ||
476 | # lda $16,_IO_stderr_ | ||
477 | # lda $17,$C32 | ||
478 | # bis $0,$0,$18 | ||
479 | # jsr $26,fprintf | ||
480 | # ldgp $29,0($26) | ||
481 | jsr $26,abort | ||
482 | ldgp $29,0($26) | ||
483 | .align 4 | ||
484 | $120: | ||
485 | bis $31,64,$3 | ||
486 | cmpult $9,$11,$2 | ||
487 | subq $3,$0,$1 | ||
488 | addl $1,$31,$0 | ||
489 | subq $9,$11,$1 | ||
490 | cmoveq $2,$1,$9 | ||
491 | beq $0,$122 | ||
492 | zapnot $0,15,$2 | ||
493 | subq $3,$0,$1 | ||
494 | sll $11,$2,$11 | ||
495 | sll $9,$2,$3 | ||
496 | srl $10,$1,$1 | ||
497 | sll $10,$2,$10 | ||
498 | bis $3,$1,$9 | ||
499 | $122: | ||
500 | srl $11,32,$5 | ||
501 | zapnot $11,15,$6 | ||
502 | lda $7,-1 | ||
503 | .align 5 | ||
504 | $123: | ||
505 | srl $9,32,$1 | ||
506 | subq $1,$5,$1 | ||
507 | bne $1,$126 | ||
508 | zapnot $7,15,$27 | ||
509 | br $31,$127 | ||
510 | .align 4 | ||
511 | $126: | ||
512 | bis $9,$9,$24 | ||
513 | bis $5,$5,$25 | ||
514 | divqu $24,$25,$27 | ||
515 | $127: | ||
516 | srl $10,32,$4 | ||
517 | .align 5 | ||
518 | $128: | ||
519 | mulq $27,$5,$1 | ||
520 | subq $9,$1,$3 | ||
521 | zapnot $3,240,$1 | ||
522 | bne $1,$129 | ||
523 | mulq $6,$27,$2 | ||
524 | sll $3,32,$1 | ||
525 | addq $1,$4,$1 | ||
526 | cmpule $2,$1,$2 | ||
527 | bne $2,$129 | ||
528 | subq $27,1,$27 | ||
529 | br $31,$128 | ||
530 | .align 4 | ||
531 | $129: | ||
532 | mulq $27,$6,$1 | ||
533 | mulq $27,$5,$4 | ||
534 | srl $1,32,$3 | ||
535 | sll $1,32,$1 | ||
536 | addq $4,$3,$4 | ||
537 | cmpult $10,$1,$2 | ||
538 | subq $10,$1,$10 | ||
539 | addq $2,$4,$2 | ||
540 | cmpult $9,$2,$1 | ||
541 | bis $2,$2,$4 | ||
542 | beq $1,$134 | ||
543 | addq $9,$11,$9 | ||
544 | subq $27,1,$27 | ||
545 | $134: | ||
546 | subl $12,1,$12 | ||
547 | subq $9,$4,$9 | ||
548 | beq $12,$124 | ||
549 | sll $27,32,$13 | ||
550 | sll $9,32,$2 | ||
551 | srl $10,32,$1 | ||
552 | sll $10,32,$10 | ||
553 | bis $2,$1,$9 | ||
554 | br $31,$123 | ||
555 | .align 4 | ||
556 | $124: | ||
557 | bis $13,$27,$0 | ||
558 | $136: | ||
559 | ldq $26,0($30) | ||
560 | ldq $9,8($30) | ||
561 | ldq $10,16($30) | ||
562 | ldq $11,24($30) | ||
563 | ldq $12,32($30) | ||
564 | ldq $13,40($30) | ||
565 | addq $30,48,$30 | ||
566 | ret $31,($26),1 | ||
567 | .end bn_div_words | ||
568 | EOF | ||
569 | return($data); | ||
570 | } | ||
571 | |||