diff options
Diffstat (limited to 'src/lib/libcrypto/bn/asm')
-rw-r--r-- | src/lib/libcrypto/bn/asm/README | 30 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/alpha.s | 344 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/pa-risc.s | 710 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/r3000.s | 646 |
4 files changed, 1730 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bn/asm/README b/src/lib/libcrypto/bn/asm/README new file mode 100644 index 0000000000..d93fbff77f --- /dev/null +++ b/src/lib/libcrypto/bn/asm/README | |||
@@ -0,0 +1,30 @@ | |||
1 | All assember in this directory are just version of the file | ||
2 | crypto/bn/bn_mulw.c. | ||
3 | |||
4 | Quite a few of these files are just the assember output from gcc since on | ||
5 | quite a few machines they are 2 times faster than the system compiler. | ||
6 | |||
7 | For the x86, I have hand written assember because of the bad job all | ||
8 | compilers seem to do on it. This normally gives a 2 time speed up in the RSA | ||
9 | routines. | ||
10 | |||
11 | For the DEC alpha, I also hand wrote the assember (except the division which | ||
12 | is just the output from the C compiler pasted on the end of the file). | ||
13 | On the 2 alpha C compilers I had access to, it was not possible to do | ||
14 | 64b x 64b -> 128b calculations (both long and the long long data types | ||
15 | were 64 bits). So the hand assember gives access to the 128 bit result and | ||
16 | a 2 times speedup :-). | ||
17 | |||
18 | The x86xxxx.obj files are the assembled version of x86xxxx.asm files. | ||
19 | I had such a hard time finding a macro assember for Microsoft, I decided to | ||
20 | include the object file to save others the hassle :-). | ||
21 | |||
22 | I have also included uu encoded versions of the .obj incase they get | ||
23 | trashed. | ||
24 | |||
25 | There are 2 versions of assember for the HP PA-RISC. | ||
26 | pa-risc.s is the origional one which works fine. | ||
27 | pa-risc2.s is a new version that often generates warnings but if the | ||
28 | tests pass, it gives performance that is over 2 times faster than | ||
29 | pa-risc.s. | ||
30 | Both were generated using gcc :-) | ||
diff --git a/src/lib/libcrypto/bn/asm/alpha.s b/src/lib/libcrypto/bn/asm/alpha.s new file mode 100644 index 0000000000..1d17b1d619 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/alpha.s | |||
@@ -0,0 +1,344 @@ | |||
1 | # DEC Alpha assember | ||
2 | # The bn_div64 is actually gcc output but the other parts are hand done. | ||
3 | # Thanks to tzeruch@ceddec.com for sending me the gcc output for | ||
4 | # bn_div64. | ||
5 | .file 1 "bn_mulw.c" | ||
6 | .set noat | ||
7 | gcc2_compiled.: | ||
8 | __gnu_compiled_c: | ||
9 | .text | ||
10 | .align 3 | ||
11 | .globl bn_mul_add_words | ||
12 | .ent bn_mul_add_words | ||
13 | bn_mul_add_words: | ||
14 | bn_mul_add_words..ng: | ||
15 | .frame $30,0,$26,0 | ||
16 | .prologue 0 | ||
17 | subq $18,2,$25 # num=-2 | ||
18 | bis $31,$31,$0 | ||
19 | blt $25,$42 | ||
20 | .align 5 | ||
21 | $142: | ||
22 | subq $18,2,$18 # num-=2 | ||
23 | subq $25,2,$25 # num-=2 | ||
24 | |||
25 | ldq $1,0($17) # a[0] | ||
26 | ldq $2,8($17) # a[1] | ||
27 | |||
28 | mulq $19,$1,$3 # a[0]*w low part r3 | ||
29 | umulh $19,$1,$1 # a[0]*w high part r1 | ||
30 | mulq $19,$2,$4 # a[1]*w low part r4 | ||
31 | umulh $19,$2,$2 # a[1]*w high part r2 | ||
32 | |||
33 | ldq $22,0($16) # r[0] r22 | ||
34 | ldq $23,8($16) # r[1] r23 | ||
35 | |||
36 | addq $3,$22,$3 # a0 low part + r[0] | ||
37 | addq $4,$23,$4 # a1 low part + r[1] | ||
38 | cmpult $3,$22,$5 # overflow? | ||
39 | cmpult $4,$23,$6 # overflow? | ||
40 | addq $5,$1,$1 # high part + overflow | ||
41 | addq $6,$2,$2 # high part + overflow | ||
42 | |||
43 | addq $3,$0,$3 # add c | ||
44 | cmpult $3,$0,$5 # overflow? | ||
45 | stq $3,0($16) | ||
46 | addq $5,$1,$0 # c=high part + overflow | ||
47 | |||
48 | addq $4,$0,$4 # add c | ||
49 | cmpult $4,$0,$5 # overflow? | ||
50 | stq $4,8($16) | ||
51 | addq $5,$2,$0 # c=high part + overflow | ||
52 | |||
53 | ble $18,$43 | ||
54 | |||
55 | addq $16,16,$16 | ||
56 | addq $17,16,$17 | ||
57 | blt $25,$42 | ||
58 | |||
59 | br $31,$142 | ||
60 | $42: | ||
61 | ldq $1,0($17) # a[0] | ||
62 | umulh $19,$1,$3 # a[0]*w high part | ||
63 | mulq $19,$1,$1 # a[0]*w low part | ||
64 | ldq $2,0($16) # r[0] | ||
65 | addq $1,$2,$1 # low part + r[0] | ||
66 | cmpult $1,$2,$4 # overflow? | ||
67 | addq $4,$3,$3 # high part + overflow | ||
68 | addq $1,$0,$1 # add c | ||
69 | cmpult $1,$0,$4 # overflow? | ||
70 | addq $4,$3,$0 # c=high part + overflow | ||
71 | stq $1,0($16) | ||
72 | |||
73 | .align 4 | ||
74 | $43: | ||
75 | ret $31,($26),1 | ||
76 | .end bn_mul_add_words | ||
77 | .align 3 | ||
78 | .globl bn_mul_words | ||
79 | .ent bn_mul_words | ||
80 | bn_mul_words: | ||
81 | bn_mul_words..ng: | ||
82 | .frame $30,0,$26,0 | ||
83 | .prologue 0 | ||
84 | subq $18,2,$25 # num=-2 | ||
85 | bis $31,$31,$0 | ||
86 | blt $25,$242 | ||
87 | .align 5 | ||
88 | $342: | ||
89 | subq $18,2,$18 # num-=2 | ||
90 | subq $25,2,$25 # num-=2 | ||
91 | |||
92 | ldq $1,0($17) # a[0] | ||
93 | ldq $2,8($17) # a[1] | ||
94 | |||
95 | mulq $19,$1,$3 # a[0]*w low part r3 | ||
96 | umulh $19,$1,$1 # a[0]*w high part r1 | ||
97 | mulq $19,$2,$4 # a[1]*w low part r4 | ||
98 | umulh $19,$2,$2 # a[1]*w high part r2 | ||
99 | |||
100 | addq $3,$0,$3 # add c | ||
101 | cmpult $3,$0,$5 # overflow? | ||
102 | stq $3,0($16) | ||
103 | addq $5,$1,$0 # c=high part + overflow | ||
104 | |||
105 | addq $4,$0,$4 # add c | ||
106 | cmpult $4,$0,$5 # overflow? | ||
107 | stq $4,8($16) | ||
108 | addq $5,$2,$0 # c=high part + overflow | ||
109 | |||
110 | ble $18,$243 | ||
111 | |||
112 | addq $16,16,$16 | ||
113 | addq $17,16,$17 | ||
114 | blt $25,$242 | ||
115 | |||
116 | br $31,$342 | ||
117 | $242: | ||
118 | ldq $1,0($17) # a[0] | ||
119 | umulh $19,$1,$3 # a[0]*w high part | ||
120 | mulq $19,$1,$1 # a[0]*w low part | ||
121 | addq $1,$0,$1 # add c | ||
122 | cmpult $1,$0,$4 # overflow? | ||
123 | addq $4,$3,$0 # c=high part + overflow | ||
124 | stq $1,0($16) | ||
125 | $243: | ||
126 | ret $31,($26),1 | ||
127 | .end bn_mul_words | ||
128 | .align 3 | ||
129 | .globl bn_sqr_words | ||
130 | .ent bn_sqr_words | ||
131 | bn_sqr_words: | ||
132 | bn_sqr_words..ng: | ||
133 | .frame $30,0,$26,0 | ||
134 | .prologue 0 | ||
135 | |||
136 | subq $18,2,$25 # num=-2 | ||
137 | blt $25,$442 | ||
138 | .align 5 | ||
139 | $542: | ||
140 | subq $18,2,$18 # num-=2 | ||
141 | subq $25,2,$25 # num-=2 | ||
142 | |||
143 | ldq $1,0($17) # a[0] | ||
144 | ldq $4,8($17) # a[1] | ||
145 | |||
146 | mulq $1,$1,$2 # a[0]*w low part r2 | ||
147 | umulh $1,$1,$3 # a[0]*w high part r3 | ||
148 | mulq $4,$4,$5 # a[1]*w low part r5 | ||
149 | umulh $4,$4,$6 # a[1]*w high part r6 | ||
150 | |||
151 | stq $2,0($16) # r[0] | ||
152 | stq $3,8($16) # r[1] | ||
153 | stq $5,16($16) # r[3] | ||
154 | stq $6,24($16) # r[4] | ||
155 | |||
156 | ble $18,$443 | ||
157 | |||
158 | addq $16,32,$16 | ||
159 | addq $17,16,$17 | ||
160 | blt $25,$442 | ||
161 | br $31,$542 | ||
162 | |||
163 | $442: | ||
164 | ldq $1,0($17) # a[0] | ||
165 | mulq $1,$1,$2 # a[0]*w low part r2 | ||
166 | umulh $1,$1,$3 # a[0]*w high part r3 | ||
167 | stq $2,0($16) # r[0] | ||
168 | stq $3,8($16) # r[1] | ||
169 | |||
170 | .align 4 | ||
171 | $443: | ||
172 | ret $31,($26),1 | ||
173 | .end bn_sqr_words | ||
174 | |||
175 | .align 3 | ||
176 | .globl bn_add_words | ||
177 | .ent bn_add_words | ||
178 | bn_add_words: | ||
179 | bn_add_words..ng: | ||
180 | .frame $30,0,$26,0 | ||
181 | .prologue 0 | ||
182 | |||
183 | bis $31,$31,$8 # carry = 0 | ||
184 | ble $19,$900 | ||
185 | $901: | ||
186 | ldq $0,0($17) # a[0] | ||
187 | ldq $1,0($18) # a[1] | ||
188 | |||
189 | addq $0,$1,$3 # c=a+b; | ||
190 | addq $17,8,$17 # a++ | ||
191 | |||
192 | cmpult $3,$1,$7 # did we overflow? | ||
193 | addq $18,8,$18 # b++ | ||
194 | |||
195 | addq $8,$3,$3 # c+=carry | ||
196 | |||
197 | cmpult $3,$8,$8 # did we overflow? | ||
198 | stq $3,($16) # r[0]=c | ||
199 | |||
200 | addq $7,$8,$8 # add into overflow | ||
201 | subq $19,1,$19 # loop-- | ||
202 | |||
203 | addq $16,8,$16 # r++ | ||
204 | bgt $19,$901 | ||
205 | $900: | ||
206 | bis $8,$8,$0 # return carry | ||
207 | ret $31,($26),1 | ||
208 | .end bn_add_words | ||
209 | |||
210 | # | ||
211 | # What follows was taken directly from the C compiler with a few | ||
212 | # hacks to redo the lables. | ||
213 | # | ||
214 | .text | ||
215 | .align 3 | ||
216 | .globl bn_div64 | ||
217 | .ent bn_div64 | ||
218 | bn_div64: | ||
219 | ldgp $29,0($27) | ||
220 | bn_div64..ng: | ||
221 | lda $30,-48($30) | ||
222 | .frame $30,48,$26,0 | ||
223 | stq $26,0($30) | ||
224 | stq $9,8($30) | ||
225 | stq $10,16($30) | ||
226 | stq $11,24($30) | ||
227 | stq $12,32($30) | ||
228 | stq $13,40($30) | ||
229 | .mask 0x4003e00,-48 | ||
230 | .prologue 1 | ||
231 | bis $16,$16,$9 | ||
232 | bis $17,$17,$10 | ||
233 | bis $18,$18,$11 | ||
234 | bis $31,$31,$13 | ||
235 | bis $31,2,$12 | ||
236 | bne $11,$119 | ||
237 | lda $0,-1 | ||
238 | br $31,$136 | ||
239 | .align 4 | ||
240 | $119: | ||
241 | bis $11,$11,$16 | ||
242 | jsr $26,BN_num_bits_word | ||
243 | ldgp $29,0($26) | ||
244 | subq $0,64,$1 | ||
245 | beq $1,$120 | ||
246 | bis $31,1,$1 | ||
247 | sll $1,$0,$1 | ||
248 | cmpule $9,$1,$1 | ||
249 | bne $1,$120 | ||
250 | # lda $16,_IO_stderr_ | ||
251 | # lda $17,$C32 | ||
252 | # bis $0,$0,$18 | ||
253 | # jsr $26,fprintf | ||
254 | # ldgp $29,0($26) | ||
255 | jsr $26,abort | ||
256 | ldgp $29,0($26) | ||
257 | .align 4 | ||
258 | $120: | ||
259 | bis $31,64,$3 | ||
260 | cmpult $9,$11,$2 | ||
261 | subq $3,$0,$1 | ||
262 | addl $1,$31,$0 | ||
263 | subq $9,$11,$1 | ||
264 | cmoveq $2,$1,$9 | ||
265 | beq $0,$122 | ||
266 | zapnot $0,15,$2 | ||
267 | subq $3,$0,$1 | ||
268 | sll $11,$2,$11 | ||
269 | sll $9,$2,$3 | ||
270 | srl $10,$1,$1 | ||
271 | sll $10,$2,$10 | ||
272 | bis $3,$1,$9 | ||
273 | $122: | ||
274 | srl $11,32,$5 | ||
275 | zapnot $11,15,$6 | ||
276 | lda $7,-1 | ||
277 | .align 5 | ||
278 | $123: | ||
279 | srl $9,32,$1 | ||
280 | subq $1,$5,$1 | ||
281 | bne $1,$126 | ||
282 | zapnot $7,15,$27 | ||
283 | br $31,$127 | ||
284 | .align 4 | ||
285 | $126: | ||
286 | bis $9,$9,$24 | ||
287 | bis $5,$5,$25 | ||
288 | divqu $24,$25,$27 | ||
289 | $127: | ||
290 | srl $10,32,$4 | ||
291 | .align 5 | ||
292 | $128: | ||
293 | mulq $27,$5,$1 | ||
294 | subq $9,$1,$3 | ||
295 | zapnot $3,240,$1 | ||
296 | bne $1,$129 | ||
297 | mulq $6,$27,$2 | ||
298 | sll $3,32,$1 | ||
299 | addq $1,$4,$1 | ||
300 | cmpule $2,$1,$2 | ||
301 | bne $2,$129 | ||
302 | subq $27,1,$27 | ||
303 | br $31,$128 | ||
304 | .align 4 | ||
305 | $129: | ||
306 | mulq $27,$6,$1 | ||
307 | mulq $27,$5,$4 | ||
308 | srl $1,32,$3 | ||
309 | sll $1,32,$1 | ||
310 | addq $4,$3,$4 | ||
311 | cmpult $10,$1,$2 | ||
312 | subq $10,$1,$10 | ||
313 | addq $2,$4,$2 | ||
314 | cmpult $9,$2,$1 | ||
315 | bis $2,$2,$4 | ||
316 | beq $1,$134 | ||
317 | addq $9,$11,$9 | ||
318 | subq $27,1,$27 | ||
319 | $134: | ||
320 | subl $12,1,$12 | ||
321 | subq $9,$4,$9 | ||
322 | beq $12,$124 | ||
323 | sll $27,32,$13 | ||
324 | sll $9,32,$2 | ||
325 | srl $10,32,$1 | ||
326 | sll $10,32,$10 | ||
327 | bis $2,$1,$9 | ||
328 | br $31,$123 | ||
329 | .align 4 | ||
330 | $124: | ||
331 | bis $13,$27,$0 | ||
332 | $136: | ||
333 | ldq $26,0($30) | ||
334 | ldq $9,8($30) | ||
335 | ldq $10,16($30) | ||
336 | ldq $11,24($30) | ||
337 | ldq $12,32($30) | ||
338 | ldq $13,40($30) | ||
339 | addq $30,48,$30 | ||
340 | ret $31,($26),1 | ||
341 | .end bn_div64 | ||
342 | .ident "GCC: (GNU) 2.7.2.1" | ||
343 | |||
344 | |||
diff --git a/src/lib/libcrypto/bn/asm/pa-risc.s b/src/lib/libcrypto/bn/asm/pa-risc.s new file mode 100644 index 0000000000..775130a191 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/pa-risc.s | |||
@@ -0,0 +1,710 @@ | |||
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=0,CALLS,SAVE_RP | ||
18 | .ENTRY | ||
19 | stw %r2,-20(0,%r30) | ||
20 | ldi 0,%r28 | ||
21 | extru %r23,31,16,%r2 | ||
22 | stw %r2,-16(0,%r30) | ||
23 | extru %r23,15,16,%r23 | ||
24 | ldil L'65536,%r31 | ||
25 | fldws -16(0,%r30),%fr11R | ||
26 | stw %r23,-16(0,%r30) | ||
27 | ldo 12(%r25),%r29 | ||
28 | ldo 12(%r26),%r23 | ||
29 | fldws -16(0,%r30),%fr11L | ||
30 | L$0002 | ||
31 | ldw 0(0,%r25),%r19 | ||
32 | extru %r19,31,16,%r20 | ||
33 | stw %r20,-16(0,%r30) | ||
34 | extru %r19,15,16,%r19 | ||
35 | fldws -16(0,%r30),%fr22L | ||
36 | stw %r19,-16(0,%r30) | ||
37 | xmpyu %fr22L,%fr11R,%fr8 | ||
38 | fldws -16(0,%r30),%fr22L | ||
39 | fstws %fr8R,-16(0,%r30) | ||
40 | xmpyu %fr11R,%fr22L,%fr10 | ||
41 | ldw -16(0,%r30),%r2 | ||
42 | stw %r20,-16(0,%r30) | ||
43 | xmpyu %fr22L,%fr11L,%fr9 | ||
44 | fldws -16(0,%r30),%fr22L | ||
45 | fstws %fr10R,-16(0,%r30) | ||
46 | copy %r2,%r22 | ||
47 | ldw -16(0,%r30),%r2 | ||
48 | fstws %fr9R,-16(0,%r30) | ||
49 | xmpyu %fr11L,%fr22L,%fr8 | ||
50 | copy %r2,%r19 | ||
51 | ldw -16(0,%r30),%r2 | ||
52 | fstws %fr8R,-16(0,%r30) | ||
53 | copy %r2,%r20 | ||
54 | ldw -16(0,%r30),%r2 | ||
55 | addl %r2,%r19,%r21 | ||
56 | comclr,<<= %r19,%r21,0 | ||
57 | addl %r20,%r31,%r20 | ||
58 | L$0005 | ||
59 | extru %r21,15,16,%r19 | ||
60 | addl %r20,%r19,%r20 | ||
61 | zdep %r21,15,16,%r19 | ||
62 | addl %r22,%r19,%r22 | ||
63 | comclr,<<= %r19,%r22,0 | ||
64 | addi,tr 1,%r20,%r19 | ||
65 | copy %r20,%r19 | ||
66 | addl %r22,%r28,%r20 | ||
67 | comclr,<<= %r28,%r20,0 | ||
68 | addi 1,%r19,%r19 | ||
69 | ldw 0(0,%r26),%r28 | ||
70 | addl %r20,%r28,%r20 | ||
71 | comclr,<<= %r28,%r20,0 | ||
72 | addi,tr 1,%r19,%r28 | ||
73 | copy %r19,%r28 | ||
74 | addib,= -1,%r24,L$0003 | ||
75 | stw %r20,0(0,%r26) | ||
76 | ldw -8(0,%r29),%r19 | ||
77 | extru %r19,31,16,%r20 | ||
78 | stw %r20,-16(0,%r30) | ||
79 | extru %r19,15,16,%r19 | ||
80 | fldws -16(0,%r30),%fr22L | ||
81 | stw %r19,-16(0,%r30) | ||
82 | xmpyu %fr22L,%fr11R,%fr8 | ||
83 | fldws -16(0,%r30),%fr22L | ||
84 | fstws %fr8R,-16(0,%r30) | ||
85 | xmpyu %fr11R,%fr22L,%fr10 | ||
86 | ldw -16(0,%r30),%r2 | ||
87 | stw %r20,-16(0,%r30) | ||
88 | xmpyu %fr22L,%fr11L,%fr9 | ||
89 | fldws -16(0,%r30),%fr22L | ||
90 | fstws %fr10R,-16(0,%r30) | ||
91 | copy %r2,%r22 | ||
92 | ldw -16(0,%r30),%r2 | ||
93 | fstws %fr9R,-16(0,%r30) | ||
94 | xmpyu %fr11L,%fr22L,%fr8 | ||
95 | copy %r2,%r19 | ||
96 | ldw -16(0,%r30),%r2 | ||
97 | fstws %fr8R,-16(0,%r30) | ||
98 | copy %r2,%r20 | ||
99 | ldw -16(0,%r30),%r2 | ||
100 | addl %r2,%r19,%r21 | ||
101 | comclr,<<= %r19,%r21,0 | ||
102 | addl %r20,%r31,%r20 | ||
103 | L$0010 | ||
104 | extru %r21,15,16,%r19 | ||
105 | addl %r20,%r19,%r20 | ||
106 | zdep %r21,15,16,%r19 | ||
107 | addl %r22,%r19,%r22 | ||
108 | comclr,<<= %r19,%r22,0 | ||
109 | addi,tr 1,%r20,%r19 | ||
110 | copy %r20,%r19 | ||
111 | addl %r22,%r28,%r20 | ||
112 | comclr,<<= %r28,%r20,0 | ||
113 | addi 1,%r19,%r19 | ||
114 | ldw -8(0,%r23),%r28 | ||
115 | addl %r20,%r28,%r20 | ||
116 | comclr,<<= %r28,%r20,0 | ||
117 | addi,tr 1,%r19,%r28 | ||
118 | copy %r19,%r28 | ||
119 | addib,= -1,%r24,L$0003 | ||
120 | stw %r20,-8(0,%r23) | ||
121 | ldw -4(0,%r29),%r19 | ||
122 | extru %r19,31,16,%r20 | ||
123 | stw %r20,-16(0,%r30) | ||
124 | extru %r19,15,16,%r19 | ||
125 | fldws -16(0,%r30),%fr22L | ||
126 | stw %r19,-16(0,%r30) | ||
127 | xmpyu %fr22L,%fr11R,%fr8 | ||
128 | fldws -16(0,%r30),%fr22L | ||
129 | fstws %fr8R,-16(0,%r30) | ||
130 | xmpyu %fr11R,%fr22L,%fr10 | ||
131 | ldw -16(0,%r30),%r2 | ||
132 | stw %r20,-16(0,%r30) | ||
133 | xmpyu %fr22L,%fr11L,%fr9 | ||
134 | fldws -16(0,%r30),%fr22L | ||
135 | fstws %fr10R,-16(0,%r30) | ||
136 | copy %r2,%r22 | ||
137 | ldw -16(0,%r30),%r2 | ||
138 | fstws %fr9R,-16(0,%r30) | ||
139 | xmpyu %fr11L,%fr22L,%fr8 | ||
140 | copy %r2,%r19 | ||
141 | ldw -16(0,%r30),%r2 | ||
142 | fstws %fr8R,-16(0,%r30) | ||
143 | copy %r2,%r20 | ||
144 | ldw -16(0,%r30),%r2 | ||
145 | addl %r2,%r19,%r21 | ||
146 | comclr,<<= %r19,%r21,0 | ||
147 | addl %r20,%r31,%r20 | ||
148 | L$0015 | ||
149 | extru %r21,15,16,%r19 | ||
150 | addl %r20,%r19,%r20 | ||
151 | zdep %r21,15,16,%r19 | ||
152 | addl %r22,%r19,%r22 | ||
153 | comclr,<<= %r19,%r22,0 | ||
154 | addi,tr 1,%r20,%r19 | ||
155 | copy %r20,%r19 | ||
156 | addl %r22,%r28,%r20 | ||
157 | comclr,<<= %r28,%r20,0 | ||
158 | addi 1,%r19,%r19 | ||
159 | ldw -4(0,%r23),%r28 | ||
160 | addl %r20,%r28,%r20 | ||
161 | comclr,<<= %r28,%r20,0 | ||
162 | addi,tr 1,%r19,%r28 | ||
163 | copy %r19,%r28 | ||
164 | addib,= -1,%r24,L$0003 | ||
165 | stw %r20,-4(0,%r23) | ||
166 | ldw 0(0,%r29),%r19 | ||
167 | extru %r19,31,16,%r20 | ||
168 | stw %r20,-16(0,%r30) | ||
169 | extru %r19,15,16,%r19 | ||
170 | fldws -16(0,%r30),%fr22L | ||
171 | stw %r19,-16(0,%r30) | ||
172 | xmpyu %fr22L,%fr11R,%fr8 | ||
173 | fldws -16(0,%r30),%fr22L | ||
174 | fstws %fr8R,-16(0,%r30) | ||
175 | xmpyu %fr11R,%fr22L,%fr10 | ||
176 | ldw -16(0,%r30),%r2 | ||
177 | stw %r20,-16(0,%r30) | ||
178 | xmpyu %fr22L,%fr11L,%fr9 | ||
179 | fldws -16(0,%r30),%fr22L | ||
180 | fstws %fr10R,-16(0,%r30) | ||
181 | copy %r2,%r22 | ||
182 | ldw -16(0,%r30),%r2 | ||
183 | fstws %fr9R,-16(0,%r30) | ||
184 | xmpyu %fr11L,%fr22L,%fr8 | ||
185 | copy %r2,%r19 | ||
186 | ldw -16(0,%r30),%r2 | ||
187 | fstws %fr8R,-16(0,%r30) | ||
188 | copy %r2,%r20 | ||
189 | ldw -16(0,%r30),%r2 | ||
190 | addl %r2,%r19,%r21 | ||
191 | comclr,<<= %r19,%r21,0 | ||
192 | addl %r20,%r31,%r20 | ||
193 | L$0020 | ||
194 | extru %r21,15,16,%r19 | ||
195 | addl %r20,%r19,%r20 | ||
196 | zdep %r21,15,16,%r19 | ||
197 | addl %r22,%r19,%r22 | ||
198 | comclr,<<= %r19,%r22,0 | ||
199 | addi,tr 1,%r20,%r19 | ||
200 | copy %r20,%r19 | ||
201 | addl %r22,%r28,%r20 | ||
202 | comclr,<<= %r28,%r20,0 | ||
203 | addi 1,%r19,%r19 | ||
204 | ldw 0(0,%r23),%r28 | ||
205 | addl %r20,%r28,%r20 | ||
206 | comclr,<<= %r28,%r20,0 | ||
207 | addi,tr 1,%r19,%r28 | ||
208 | copy %r19,%r28 | ||
209 | addib,= -1,%r24,L$0003 | ||
210 | stw %r20,0(0,%r23) | ||
211 | ldo 16(%r29),%r29 | ||
212 | ldo 16(%r25),%r25 | ||
213 | ldo 16(%r23),%r23 | ||
214 | bl L$0002,0 | ||
215 | ldo 16(%r26),%r26 | ||
216 | L$0003 | ||
217 | ldw -20(0,%r30),%r2 | ||
218 | bv,n 0(%r2) | ||
219 | .EXIT | ||
220 | .PROCEND | ||
221 | .align 4 | ||
222 | .EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR | ||
223 | bn_mul_words | ||
224 | .PROC | ||
225 | .CALLINFO FRAME=0,CALLS,SAVE_RP | ||
226 | .ENTRY | ||
227 | stw %r2,-20(0,%r30) | ||
228 | ldi 0,%r28 | ||
229 | extru %r23,31,16,%r2 | ||
230 | stw %r2,-16(0,%r30) | ||
231 | extru %r23,15,16,%r23 | ||
232 | ldil L'65536,%r31 | ||
233 | fldws -16(0,%r30),%fr11R | ||
234 | stw %r23,-16(0,%r30) | ||
235 | ldo 12(%r26),%r29 | ||
236 | ldo 12(%r25),%r23 | ||
237 | fldws -16(0,%r30),%fr11L | ||
238 | L$0026 | ||
239 | ldw 0(0,%r25),%r19 | ||
240 | extru %r19,31,16,%r20 | ||
241 | stw %r20,-16(0,%r30) | ||
242 | extru %r19,15,16,%r19 | ||
243 | fldws -16(0,%r30),%fr22L | ||
244 | stw %r19,-16(0,%r30) | ||
245 | xmpyu %fr22L,%fr11R,%fr8 | ||
246 | fldws -16(0,%r30),%fr22L | ||
247 | fstws %fr8R,-16(0,%r30) | ||
248 | xmpyu %fr11R,%fr22L,%fr10 | ||
249 | ldw -16(0,%r30),%r2 | ||
250 | stw %r20,-16(0,%r30) | ||
251 | xmpyu %fr22L,%fr11L,%fr9 | ||
252 | fldws -16(0,%r30),%fr22L | ||
253 | fstws %fr10R,-16(0,%r30) | ||
254 | copy %r2,%r22 | ||
255 | ldw -16(0,%r30),%r2 | ||
256 | fstws %fr9R,-16(0,%r30) | ||
257 | xmpyu %fr11L,%fr22L,%fr8 | ||
258 | copy %r2,%r19 | ||
259 | ldw -16(0,%r30),%r2 | ||
260 | fstws %fr8R,-16(0,%r30) | ||
261 | copy %r2,%r20 | ||
262 | ldw -16(0,%r30),%r2 | ||
263 | addl %r2,%r19,%r21 | ||
264 | comclr,<<= %r19,%r21,0 | ||
265 | addl %r20,%r31,%r20 | ||
266 | L$0029 | ||
267 | extru %r21,15,16,%r19 | ||
268 | addl %r20,%r19,%r20 | ||
269 | zdep %r21,15,16,%r19 | ||
270 | addl %r22,%r19,%r22 | ||
271 | comclr,<<= %r19,%r22,0 | ||
272 | addi,tr 1,%r20,%r19 | ||
273 | copy %r20,%r19 | ||
274 | addl %r22,%r28,%r20 | ||
275 | comclr,<<= %r28,%r20,0 | ||
276 | addi,tr 1,%r19,%r28 | ||
277 | copy %r19,%r28 | ||
278 | addib,= -1,%r24,L$0027 | ||
279 | stw %r20,0(0,%r26) | ||
280 | ldw -8(0,%r23),%r19 | ||
281 | extru %r19,31,16,%r20 | ||
282 | stw %r20,-16(0,%r30) | ||
283 | extru %r19,15,16,%r19 | ||
284 | fldws -16(0,%r30),%fr22L | ||
285 | stw %r19,-16(0,%r30) | ||
286 | xmpyu %fr22L,%fr11R,%fr8 | ||
287 | fldws -16(0,%r30),%fr22L | ||
288 | fstws %fr8R,-16(0,%r30) | ||
289 | xmpyu %fr11R,%fr22L,%fr10 | ||
290 | ldw -16(0,%r30),%r2 | ||
291 | stw %r20,-16(0,%r30) | ||
292 | xmpyu %fr22L,%fr11L,%fr9 | ||
293 | fldws -16(0,%r30),%fr22L | ||
294 | fstws %fr10R,-16(0,%r30) | ||
295 | copy %r2,%r22 | ||
296 | ldw -16(0,%r30),%r2 | ||
297 | fstws %fr9R,-16(0,%r30) | ||
298 | xmpyu %fr11L,%fr22L,%fr8 | ||
299 | copy %r2,%r19 | ||
300 | ldw -16(0,%r30),%r2 | ||
301 | fstws %fr8R,-16(0,%r30) | ||
302 | copy %r2,%r20 | ||
303 | ldw -16(0,%r30),%r2 | ||
304 | addl %r2,%r19,%r21 | ||
305 | comclr,<<= %r19,%r21,0 | ||
306 | addl %r20,%r31,%r20 | ||
307 | L$0033 | ||
308 | extru %r21,15,16,%r19 | ||
309 | addl %r20,%r19,%r20 | ||
310 | zdep %r21,15,16,%r19 | ||
311 | addl %r22,%r19,%r22 | ||
312 | comclr,<<= %r19,%r22,0 | ||
313 | addi,tr 1,%r20,%r19 | ||
314 | copy %r20,%r19 | ||
315 | addl %r22,%r28,%r20 | ||
316 | comclr,<<= %r28,%r20,0 | ||
317 | addi,tr 1,%r19,%r28 | ||
318 | copy %r19,%r28 | ||
319 | addib,= -1,%r24,L$0027 | ||
320 | stw %r20,-8(0,%r29) | ||
321 | ldw -4(0,%r23),%r19 | ||
322 | extru %r19,31,16,%r20 | ||
323 | stw %r20,-16(0,%r30) | ||
324 | extru %r19,15,16,%r19 | ||
325 | fldws -16(0,%r30),%fr22L | ||
326 | stw %r19,-16(0,%r30) | ||
327 | xmpyu %fr22L,%fr11R,%fr8 | ||
328 | fldws -16(0,%r30),%fr22L | ||
329 | fstws %fr8R,-16(0,%r30) | ||
330 | xmpyu %fr11R,%fr22L,%fr10 | ||
331 | ldw -16(0,%r30),%r2 | ||
332 | stw %r20,-16(0,%r30) | ||
333 | xmpyu %fr22L,%fr11L,%fr9 | ||
334 | fldws -16(0,%r30),%fr22L | ||
335 | fstws %fr10R,-16(0,%r30) | ||
336 | copy %r2,%r22 | ||
337 | ldw -16(0,%r30),%r2 | ||
338 | fstws %fr9R,-16(0,%r30) | ||
339 | xmpyu %fr11L,%fr22L,%fr8 | ||
340 | copy %r2,%r19 | ||
341 | ldw -16(0,%r30),%r2 | ||
342 | fstws %fr8R,-16(0,%r30) | ||
343 | copy %r2,%r20 | ||
344 | ldw -16(0,%r30),%r2 | ||
345 | addl %r2,%r19,%r21 | ||
346 | comclr,<<= %r19,%r21,0 | ||
347 | addl %r20,%r31,%r20 | ||
348 | L$0037 | ||
349 | extru %r21,15,16,%r19 | ||
350 | addl %r20,%r19,%r20 | ||
351 | zdep %r21,15,16,%r19 | ||
352 | addl %r22,%r19,%r22 | ||
353 | comclr,<<= %r19,%r22,0 | ||
354 | addi,tr 1,%r20,%r19 | ||
355 | copy %r20,%r19 | ||
356 | addl %r22,%r28,%r20 | ||
357 | comclr,<<= %r28,%r20,0 | ||
358 | addi,tr 1,%r19,%r28 | ||
359 | copy %r19,%r28 | ||
360 | addib,= -1,%r24,L$0027 | ||
361 | stw %r20,-4(0,%r29) | ||
362 | ldw 0(0,%r23),%r19 | ||
363 | extru %r19,31,16,%r20 | ||
364 | stw %r20,-16(0,%r30) | ||
365 | extru %r19,15,16,%r19 | ||
366 | fldws -16(0,%r30),%fr22L | ||
367 | stw %r19,-16(0,%r30) | ||
368 | xmpyu %fr22L,%fr11R,%fr8 | ||
369 | fldws -16(0,%r30),%fr22L | ||
370 | fstws %fr8R,-16(0,%r30) | ||
371 | xmpyu %fr11R,%fr22L,%fr10 | ||
372 | ldw -16(0,%r30),%r2 | ||
373 | stw %r20,-16(0,%r30) | ||
374 | xmpyu %fr22L,%fr11L,%fr9 | ||
375 | fldws -16(0,%r30),%fr22L | ||
376 | fstws %fr10R,-16(0,%r30) | ||
377 | copy %r2,%r22 | ||
378 | ldw -16(0,%r30),%r2 | ||
379 | fstws %fr9R,-16(0,%r30) | ||
380 | xmpyu %fr11L,%fr22L,%fr8 | ||
381 | copy %r2,%r19 | ||
382 | ldw -16(0,%r30),%r2 | ||
383 | fstws %fr8R,-16(0,%r30) | ||
384 | copy %r2,%r20 | ||
385 | ldw -16(0,%r30),%r2 | ||
386 | addl %r2,%r19,%r21 | ||
387 | comclr,<<= %r19,%r21,0 | ||
388 | addl %r20,%r31,%r20 | ||
389 | L$0041 | ||
390 | extru %r21,15,16,%r19 | ||
391 | addl %r20,%r19,%r20 | ||
392 | zdep %r21,15,16,%r19 | ||
393 | addl %r22,%r19,%r22 | ||
394 | comclr,<<= %r19,%r22,0 | ||
395 | addi,tr 1,%r20,%r19 | ||
396 | copy %r20,%r19 | ||
397 | addl %r22,%r28,%r20 | ||
398 | comclr,<<= %r28,%r20,0 | ||
399 | addi,tr 1,%r19,%r28 | ||
400 | copy %r19,%r28 | ||
401 | addib,= -1,%r24,L$0027 | ||
402 | stw %r20,0(0,%r29) | ||
403 | ldo 16(%r23),%r23 | ||
404 | ldo 16(%r25),%r25 | ||
405 | ldo 16(%r29),%r29 | ||
406 | bl L$0026,0 | ||
407 | ldo 16(%r26),%r26 | ||
408 | L$0027 | ||
409 | ldw -20(0,%r30),%r2 | ||
410 | bv,n 0(%r2) | ||
411 | .EXIT | ||
412 | .PROCEND | ||
413 | .align 4 | ||
414 | .EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR | ||
415 | bn_sqr_words | ||
416 | .PROC | ||
417 | .CALLINFO FRAME=0,NO_CALLS | ||
418 | .ENTRY | ||
419 | ldo 28(%r26),%r23 | ||
420 | ldo 12(%r25),%r28 | ||
421 | L$0046 | ||
422 | ldw 0(0,%r25),%r21 | ||
423 | extru %r21,31,16,%r22 | ||
424 | stw %r22,-16(0,%r30) | ||
425 | extru %r21,15,16,%r21 | ||
426 | fldws -16(0,%r30),%fr10L | ||
427 | stw %r21,-16(0,%r30) | ||
428 | fldws -16(0,%r30),%fr10R | ||
429 | xmpyu %fr10L,%fr10R,%fr8 | ||
430 | fstws %fr8R,-16(0,%r30) | ||
431 | ldw -16(0,%r30),%r29 | ||
432 | stw %r22,-16(0,%r30) | ||
433 | fldws -16(0,%r30),%fr10R | ||
434 | stw %r21,-16(0,%r30) | ||
435 | copy %r29,%r19 | ||
436 | xmpyu %fr10L,%fr10R,%fr8 | ||
437 | fldws -16(0,%r30),%fr10L | ||
438 | stw %r21,-16(0,%r30) | ||
439 | fldws -16(0,%r30),%fr10R | ||
440 | fstws %fr8R,-16(0,%r30) | ||
441 | extru %r19,16,17,%r20 | ||
442 | zdep %r19,14,15,%r19 | ||
443 | ldw -16(0,%r30),%r29 | ||
444 | xmpyu %fr10L,%fr10R,%fr9 | ||
445 | addl %r29,%r19,%r22 | ||
446 | stw %r22,0(0,%r26) | ||
447 | fstws %fr9R,-16(0,%r30) | ||
448 | ldw -16(0,%r30),%r29 | ||
449 | addl %r29,%r20,%r21 | ||
450 | comclr,<<= %r19,%r22,0 | ||
451 | addi 1,%r21,%r21 | ||
452 | addib,= -1,%r24,L$0057 | ||
453 | stw %r21,-24(0,%r23) | ||
454 | ldw -8(0,%r28),%r21 | ||
455 | extru %r21,31,16,%r22 | ||
456 | stw %r22,-16(0,%r30) | ||
457 | extru %r21,15,16,%r21 | ||
458 | fldws -16(0,%r30),%fr10L | ||
459 | stw %r21,-16(0,%r30) | ||
460 | fldws -16(0,%r30),%fr10R | ||
461 | xmpyu %fr10L,%fr10R,%fr8 | ||
462 | fstws %fr8R,-16(0,%r30) | ||
463 | ldw -16(0,%r30),%r29 | ||
464 | stw %r22,-16(0,%r30) | ||
465 | fldws -16(0,%r30),%fr10R | ||
466 | stw %r21,-16(0,%r30) | ||
467 | copy %r29,%r19 | ||
468 | xmpyu %fr10L,%fr10R,%fr8 | ||
469 | fldws -16(0,%r30),%fr10L | ||
470 | stw %r21,-16(0,%r30) | ||
471 | fldws -16(0,%r30),%fr10R | ||
472 | fstws %fr8R,-16(0,%r30) | ||
473 | extru %r19,16,17,%r20 | ||
474 | zdep %r19,14,15,%r19 | ||
475 | ldw -16(0,%r30),%r29 | ||
476 | xmpyu %fr10L,%fr10R,%fr9 | ||
477 | addl %r29,%r19,%r22 | ||
478 | stw %r22,-20(0,%r23) | ||
479 | fstws %fr9R,-16(0,%r30) | ||
480 | ldw -16(0,%r30),%r29 | ||
481 | addl %r29,%r20,%r21 | ||
482 | comclr,<<= %r19,%r22,0 | ||
483 | addi 1,%r21,%r21 | ||
484 | addib,= -1,%r24,L$0057 | ||
485 | stw %r21,-16(0,%r23) | ||
486 | ldw -4(0,%r28),%r21 | ||
487 | extru %r21,31,16,%r22 | ||
488 | stw %r22,-16(0,%r30) | ||
489 | extru %r21,15,16,%r21 | ||
490 | fldws -16(0,%r30),%fr10L | ||
491 | stw %r21,-16(0,%r30) | ||
492 | fldws -16(0,%r30),%fr10R | ||
493 | xmpyu %fr10L,%fr10R,%fr8 | ||
494 | fstws %fr8R,-16(0,%r30) | ||
495 | ldw -16(0,%r30),%r29 | ||
496 | stw %r22,-16(0,%r30) | ||
497 | fldws -16(0,%r30),%fr10R | ||
498 | stw %r21,-16(0,%r30) | ||
499 | copy %r29,%r19 | ||
500 | xmpyu %fr10L,%fr10R,%fr8 | ||
501 | fldws -16(0,%r30),%fr10L | ||
502 | stw %r21,-16(0,%r30) | ||
503 | fldws -16(0,%r30),%fr10R | ||
504 | fstws %fr8R,-16(0,%r30) | ||
505 | extru %r19,16,17,%r20 | ||
506 | zdep %r19,14,15,%r19 | ||
507 | ldw -16(0,%r30),%r29 | ||
508 | xmpyu %fr10L,%fr10R,%fr9 | ||
509 | addl %r29,%r19,%r22 | ||
510 | stw %r22,-12(0,%r23) | ||
511 | fstws %fr9R,-16(0,%r30) | ||
512 | ldw -16(0,%r30),%r29 | ||
513 | addl %r29,%r20,%r21 | ||
514 | comclr,<<= %r19,%r22,0 | ||
515 | addi 1,%r21,%r21 | ||
516 | addib,= -1,%r24,L$0057 | ||
517 | stw %r21,-8(0,%r23) | ||
518 | ldw 0(0,%r28),%r21 | ||
519 | extru %r21,31,16,%r22 | ||
520 | stw %r22,-16(0,%r30) | ||
521 | extru %r21,15,16,%r21 | ||
522 | fldws -16(0,%r30),%fr10L | ||
523 | stw %r21,-16(0,%r30) | ||
524 | fldws -16(0,%r30),%fr10R | ||
525 | xmpyu %fr10L,%fr10R,%fr8 | ||
526 | fstws %fr8R,-16(0,%r30) | ||
527 | ldw -16(0,%r30),%r29 | ||
528 | stw %r22,-16(0,%r30) | ||
529 | fldws -16(0,%r30),%fr10R | ||
530 | stw %r21,-16(0,%r30) | ||
531 | copy %r29,%r19 | ||
532 | xmpyu %fr10L,%fr10R,%fr8 | ||
533 | fldws -16(0,%r30),%fr10L | ||
534 | stw %r21,-16(0,%r30) | ||
535 | fldws -16(0,%r30),%fr10R | ||
536 | fstws %fr8R,-16(0,%r30) | ||
537 | extru %r19,16,17,%r20 | ||
538 | zdep %r19,14,15,%r19 | ||
539 | ldw -16(0,%r30),%r29 | ||
540 | xmpyu %fr10L,%fr10R,%fr9 | ||
541 | addl %r29,%r19,%r22 | ||
542 | stw %r22,-4(0,%r23) | ||
543 | fstws %fr9R,-16(0,%r30) | ||
544 | ldw -16(0,%r30),%r29 | ||
545 | addl %r29,%r20,%r21 | ||
546 | comclr,<<= %r19,%r22,0 | ||
547 | addi 1,%r21,%r21 | ||
548 | addib,= -1,%r24,L$0057 | ||
549 | stw %r21,0(0,%r23) | ||
550 | ldo 16(%r28),%r28 | ||
551 | ldo 16(%r25),%r25 | ||
552 | ldo 32(%r23),%r23 | ||
553 | bl L$0046,0 | ||
554 | ldo 32(%r26),%r26 | ||
555 | L$0057 | ||
556 | bv,n 0(%r2) | ||
557 | .EXIT | ||
558 | .PROCEND | ||
559 | .IMPORT BN_num_bits_word,CODE | ||
560 | .IMPORT fprintf,CODE | ||
561 | .IMPORT __iob,DATA | ||
562 | .SPACE $TEXT$ | ||
563 | .SUBSPA $LIT$ | ||
564 | |||
565 | .align 4 | ||
566 | L$C0000 | ||
567 | .STRING "Division would overflow\x0a\x00" | ||
568 | .IMPORT abort,CODE | ||
569 | .SPACE $TEXT$ | ||
570 | .SUBSPA $CODE$ | ||
571 | |||
572 | .align 4 | ||
573 | .EXPORT bn_div64,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR | ||
574 | bn_div64 | ||
575 | .PROC | ||
576 | .CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=8 | ||
577 | .ENTRY | ||
578 | stw %r2,-20(0,%r30) | ||
579 | stwm %r8,128(0,%r30) | ||
580 | stw %r7,-124(0,%r30) | ||
581 | stw %r4,-112(0,%r30) | ||
582 | stw %r3,-108(0,%r30) | ||
583 | copy %r26,%r3 | ||
584 | copy %r25,%r4 | ||
585 | stw %r6,-120(0,%r30) | ||
586 | ldi 0,%r7 | ||
587 | stw %r5,-116(0,%r30) | ||
588 | movb,<> %r24,%r5,L$0059 | ||
589 | ldi 2,%r6 | ||
590 | bl L$0076,0 | ||
591 | ldi -1,%r28 | ||
592 | L$0059 | ||
593 | .CALL ARGW0=GR | ||
594 | bl BN_num_bits_word,%r2 | ||
595 | copy %r5,%r26 | ||
596 | ldi 32,%r19 | ||
597 | comb,= %r19,%r28,L$0060 | ||
598 | subi 31,%r28,%r19 | ||
599 | mtsar %r19 | ||
600 | zvdepi 1,32,%r19 | ||
601 | comb,>>= %r19,%r3,L$0060 | ||
602 | addil LR'__iob-$global$+32,%r27 | ||
603 | ldo RR'__iob-$global$+32(%r1),%r26 | ||
604 | ldil LR'L$C0000,%r25 | ||
605 | .CALL ARGW0=GR,ARGW1=GR | ||
606 | bl fprintf,%r2 | ||
607 | ldo RR'L$C0000(%r25),%r25 | ||
608 | .CALL | ||
609 | bl abort,%r2 | ||
610 | nop | ||
611 | L$0060 | ||
612 | comb,>> %r5,%r3,L$0061 | ||
613 | subi 32,%r28,%r28 | ||
614 | sub %r3,%r5,%r3 | ||
615 | L$0061 | ||
616 | comib,= 0,%r28,L$0062 | ||
617 | subi 31,%r28,%r19 | ||
618 | mtsar %r19 | ||
619 | zvdep %r5,32,%r5 | ||
620 | zvdep %r3,32,%r21 | ||
621 | subi 32,%r28,%r20 | ||
622 | mtsar %r20 | ||
623 | vshd 0,%r4,%r20 | ||
624 | or %r21,%r20,%r3 | ||
625 | mtsar %r19 | ||
626 | zvdep %r4,32,%r4 | ||
627 | L$0062 | ||
628 | extru %r5,15,16,%r23 | ||
629 | extru %r5,31,16,%r28 | ||
630 | L$0063 | ||
631 | extru %r3,15,16,%r19 | ||
632 | comb,<> %r23,%r19,L$0066 | ||
633 | copy %r3,%r26 | ||
634 | bl L$0067,0 | ||
635 | zdepi -1,31,16,%r29 | ||
636 | L$0066 | ||
637 | .IMPORT $$divU,MILLICODE | ||
638 | bl $$divU,%r31 | ||
639 | copy %r23,%r25 | ||
640 | L$0067 | ||
641 | stw %r29,-16(0,%r30) | ||
642 | fldws -16(0,%r30),%fr10L | ||
643 | stw %r28,-16(0,%r30) | ||
644 | fldws -16(0,%r30),%fr10R | ||
645 | stw %r23,-16(0,%r30) | ||
646 | xmpyu %fr10L,%fr10R,%fr8 | ||
647 | fldws -16(0,%r30),%fr10R | ||
648 | fstws %fr8R,-16(0,%r30) | ||
649 | xmpyu %fr10L,%fr10R,%fr9 | ||
650 | ldw -16(0,%r30),%r8 | ||
651 | fstws %fr9R,-16(0,%r30) | ||
652 | copy %r8,%r22 | ||
653 | ldw -16(0,%r30),%r8 | ||
654 | extru %r4,15,16,%r24 | ||
655 | copy %r8,%r21 | ||
656 | L$0068 | ||
657 | sub %r3,%r21,%r20 | ||
658 | copy %r20,%r19 | ||
659 | depi 0,31,16,%r19 | ||
660 | comib,<> 0,%r19,L$0069 | ||
661 | zdep %r20,15,16,%r19 | ||
662 | addl %r19,%r24,%r19 | ||
663 | comb,>>= %r19,%r22,L$0069 | ||
664 | sub %r22,%r28,%r22 | ||
665 | sub %r21,%r23,%r21 | ||
666 | bl L$0068,0 | ||
667 | ldo -1(%r29),%r29 | ||
668 | L$0069 | ||
669 | stw %r29,-16(0,%r30) | ||
670 | fldws -16(0,%r30),%fr10L | ||
671 | stw %r28,-16(0,%r30) | ||
672 | fldws -16(0,%r30),%fr10R | ||
673 | xmpyu %fr10L,%fr10R,%fr8 | ||
674 | fstws %fr8R,-16(0,%r30) | ||
675 | ldw -16(0,%r30),%r8 | ||
676 | stw %r23,-16(0,%r30) | ||
677 | fldws -16(0,%r30),%fr10R | ||
678 | copy %r8,%r19 | ||
679 | xmpyu %fr10L,%fr10R,%fr8 | ||
680 | fstws %fr8R,-16(0,%r30) | ||
681 | extru %r19,15,16,%r20 | ||
682 | ldw -16(0,%r30),%r8 | ||
683 | zdep %r19,15,16,%r19 | ||
684 | addl %r8,%r20,%r20 | ||
685 | comclr,<<= %r19,%r4,0 | ||
686 | addi 1,%r20,%r20 | ||
687 | comb,<<= %r20,%r3,L$0074 | ||
688 | sub %r4,%r19,%r4 | ||
689 | addl %r3,%r5,%r3 | ||
690 | ldo -1(%r29),%r29 | ||
691 | L$0074 | ||
692 | addib,= -1,%r6,L$0064 | ||
693 | sub %r3,%r20,%r3 | ||
694 | zdep %r29,15,16,%r7 | ||
695 | shd %r3,%r4,16,%r3 | ||
696 | bl L$0063,0 | ||
697 | zdep %r4,15,16,%r4 | ||
698 | L$0064 | ||
699 | or %r7,%r29,%r28 | ||
700 | L$0076 | ||
701 | ldw -148(0,%r30),%r2 | ||
702 | ldw -124(0,%r30),%r7 | ||
703 | ldw -120(0,%r30),%r6 | ||
704 | ldw -116(0,%r30),%r5 | ||
705 | ldw -112(0,%r30),%r4 | ||
706 | ldw -108(0,%r30),%r3 | ||
707 | bv 0(%r2) | ||
708 | ldwm -128(0,%r30),%r8 | ||
709 | .EXIT | ||
710 | .PROCEND | ||
diff --git a/src/lib/libcrypto/bn/asm/r3000.s b/src/lib/libcrypto/bn/asm/r3000.s new file mode 100644 index 0000000000..e95269afa3 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/r3000.s | |||
@@ -0,0 +1,646 @@ | |||
1 | .file 1 "../bn_mulw.c" | ||
2 | .set nobopt | ||
3 | .option pic2 | ||
4 | |||
5 | # GNU C 2.6.3 [AL 1.1, MM 40] SGI running IRIX 5.0 compiled by GNU C | ||
6 | |||
7 | # Cc1 defaults: | ||
8 | # -mabicalls | ||
9 | |||
10 | # Cc1 arguments (-G value = 0, Cpu = 3000, ISA = 1): | ||
11 | # -quiet -dumpbase -O2 -o | ||
12 | |||
13 | gcc2_compiled.: | ||
14 | __gnu_compiled_c: | ||
15 | .rdata | ||
16 | |||
17 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
18 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x34,0x39,0x20 | ||
19 | .byte 0x24,0x0 | ||
20 | |||
21 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
22 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x33,0x34,0x20 | ||
23 | .byte 0x24,0x0 | ||
24 | |||
25 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
26 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x35,0x20,0x24 | ||
27 | .byte 0x0 | ||
28 | |||
29 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
30 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x38,0x20,0x24 | ||
31 | .byte 0x0 | ||
32 | |||
33 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
34 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x32,0x33,0x20 | ||
35 | .byte 0x24,0x0 | ||
36 | |||
37 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
38 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x37,0x38,0x20 | ||
39 | .byte 0x24,0x0 | ||
40 | |||
41 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
42 | .byte 0x6e,0x3a,0x20,0x33,0x2e,0x37,0x30,0x20 | ||
43 | .byte 0x24,0x0 | ||
44 | |||
45 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
46 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x32,0x20,0x24 | ||
47 | .byte 0x0 | ||
48 | |||
49 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
50 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x34,0x20,0x24 | ||
51 | .byte 0x0 | ||
52 | |||
53 | .byte 0x24,0x52,0x65,0x76,0x69,0x73,0x69,0x6f | ||
54 | .byte 0x6e,0x3a,0x20,0x31,0x2e,0x38,0x20,0x24 | ||
55 | .byte 0x0 | ||
56 | .text | ||
57 | .align 2 | ||
58 | .globl bn_mul_add_words | ||
59 | .ent bn_mul_add_words | ||
60 | bn_mul_add_words: | ||
61 | .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, extra= 0 | ||
62 | .mask 0x00000000,0 | ||
63 | .fmask 0x00000000,0 | ||
64 | .set noreorder | ||
65 | .cpload $25 | ||
66 | .set reorder | ||
67 | move $12,$4 | ||
68 | move $14,$5 | ||
69 | move $9,$6 | ||
70 | move $13,$7 | ||
71 | move $8,$0 | ||
72 | addu $10,$12,12 | ||
73 | addu $11,$14,12 | ||
74 | $L2: | ||
75 | lw $6,0($14) | ||
76 | #nop | ||
77 | multu $13,$6 | ||
78 | mfhi $6 | ||
79 | mflo $7 | ||
80 | #nop | ||
81 | move $5,$8 | ||
82 | move $4,$0 | ||
83 | lw $3,0($12) | ||
84 | addu $9,$9,-1 | ||
85 | move $2,$0 | ||
86 | addu $7,$7,$3 | ||
87 | sltu $8,$7,$3 | ||
88 | addu $6,$6,$2 | ||
89 | addu $6,$6,$8 | ||
90 | addu $7,$7,$5 | ||
91 | sltu $2,$7,$5 | ||
92 | addu $6,$6,$4 | ||
93 | addu $6,$6,$2 | ||
94 | srl $3,$6,0 | ||
95 | move $2,$0 | ||
96 | move $8,$3 | ||
97 | .set noreorder | ||
98 | .set nomacro | ||
99 | beq $9,$0,$L3 | ||
100 | sw $7,0($12) | ||
101 | .set macro | ||
102 | .set reorder | ||
103 | |||
104 | lw $6,-8($11) | ||
105 | #nop | ||
106 | multu $13,$6 | ||
107 | mfhi $6 | ||
108 | mflo $7 | ||
109 | #nop | ||
110 | move $5,$8 | ||
111 | move $4,$0 | ||
112 | lw $3,-8($10) | ||
113 | addu $9,$9,-1 | ||
114 | move $2,$0 | ||
115 | addu $7,$7,$3 | ||
116 | sltu $8,$7,$3 | ||
117 | addu $6,$6,$2 | ||
118 | addu $6,$6,$8 | ||
119 | addu $7,$7,$5 | ||
120 | sltu $2,$7,$5 | ||
121 | addu $6,$6,$4 | ||
122 | addu $6,$6,$2 | ||
123 | srl $3,$6,0 | ||
124 | move $2,$0 | ||
125 | move $8,$3 | ||
126 | .set noreorder | ||
127 | .set nomacro | ||
128 | beq $9,$0,$L3 | ||
129 | sw $7,-8($10) | ||
130 | .set macro | ||
131 | .set reorder | ||
132 | |||
133 | lw $6,-4($11) | ||
134 | #nop | ||
135 | multu $13,$6 | ||
136 | mfhi $6 | ||
137 | mflo $7 | ||
138 | #nop | ||
139 | move $5,$8 | ||
140 | move $4,$0 | ||
141 | lw $3,-4($10) | ||
142 | addu $9,$9,-1 | ||
143 | move $2,$0 | ||
144 | addu $7,$7,$3 | ||
145 | sltu $8,$7,$3 | ||
146 | addu $6,$6,$2 | ||
147 | addu $6,$6,$8 | ||
148 | addu $7,$7,$5 | ||
149 | sltu $2,$7,$5 | ||
150 | addu $6,$6,$4 | ||
151 | addu $6,$6,$2 | ||
152 | srl $3,$6,0 | ||
153 | move $2,$0 | ||
154 | move $8,$3 | ||
155 | .set noreorder | ||
156 | .set nomacro | ||
157 | beq $9,$0,$L3 | ||
158 | sw $7,-4($10) | ||
159 | .set macro | ||
160 | .set reorder | ||
161 | |||
162 | lw $6,0($11) | ||
163 | #nop | ||
164 | multu $13,$6 | ||
165 | mfhi $6 | ||
166 | mflo $7 | ||
167 | #nop | ||
168 | move $5,$8 | ||
169 | move $4,$0 | ||
170 | lw $3,0($10) | ||
171 | addu $9,$9,-1 | ||
172 | move $2,$0 | ||
173 | addu $7,$7,$3 | ||
174 | sltu $8,$7,$3 | ||
175 | addu $6,$6,$2 | ||
176 | addu $6,$6,$8 | ||
177 | addu $7,$7,$5 | ||
178 | sltu $2,$7,$5 | ||
179 | addu $6,$6,$4 | ||
180 | addu $6,$6,$2 | ||
181 | srl $3,$6,0 | ||
182 | move $2,$0 | ||
183 | move $8,$3 | ||
184 | .set noreorder | ||
185 | .set nomacro | ||
186 | beq $9,$0,$L3 | ||
187 | sw $7,0($10) | ||
188 | .set macro | ||
189 | .set reorder | ||
190 | |||
191 | addu $11,$11,16 | ||
192 | addu $14,$14,16 | ||
193 | addu $10,$10,16 | ||
194 | .set noreorder | ||
195 | .set nomacro | ||
196 | j $L2 | ||
197 | addu $12,$12,16 | ||
198 | .set macro | ||
199 | .set reorder | ||
200 | |||
201 | $L3: | ||
202 | .set noreorder | ||
203 | .set nomacro | ||
204 | j $31 | ||
205 | move $2,$8 | ||
206 | .set macro | ||
207 | .set reorder | ||
208 | |||
209 | .end bn_mul_add_words | ||
210 | .align 2 | ||
211 | .globl bn_mul_words | ||
212 | .ent bn_mul_words | ||
213 | bn_mul_words: | ||
214 | .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, extra= 0 | ||
215 | .mask 0x00000000,0 | ||
216 | .fmask 0x00000000,0 | ||
217 | .set noreorder | ||
218 | .cpload $25 | ||
219 | .set reorder | ||
220 | move $11,$4 | ||
221 | move $12,$5 | ||
222 | move $8,$6 | ||
223 | move $6,$0 | ||
224 | addu $10,$11,12 | ||
225 | addu $9,$12,12 | ||
226 | $L10: | ||
227 | lw $4,0($12) | ||
228 | #nop | ||
229 | multu $7,$4 | ||
230 | mfhi $4 | ||
231 | mflo $5 | ||
232 | #nop | ||
233 | move $3,$6 | ||
234 | move $2,$0 | ||
235 | addu $8,$8,-1 | ||
236 | addu $5,$5,$3 | ||
237 | sltu $6,$5,$3 | ||
238 | addu $4,$4,$2 | ||
239 | addu $4,$4,$6 | ||
240 | srl $3,$4,0 | ||
241 | move $2,$0 | ||
242 | move $6,$3 | ||
243 | .set noreorder | ||
244 | .set nomacro | ||
245 | beq $8,$0,$L11 | ||
246 | sw $5,0($11) | ||
247 | .set macro | ||
248 | .set reorder | ||
249 | |||
250 | lw $4,-8($9) | ||
251 | #nop | ||
252 | multu $7,$4 | ||
253 | mfhi $4 | ||
254 | mflo $5 | ||
255 | #nop | ||
256 | move $3,$6 | ||
257 | move $2,$0 | ||
258 | addu $8,$8,-1 | ||
259 | addu $5,$5,$3 | ||
260 | sltu $6,$5,$3 | ||
261 | addu $4,$4,$2 | ||
262 | addu $4,$4,$6 | ||
263 | srl $3,$4,0 | ||
264 | move $2,$0 | ||
265 | move $6,$3 | ||
266 | .set noreorder | ||
267 | .set nomacro | ||
268 | beq $8,$0,$L11 | ||
269 | sw $5,-8($10) | ||
270 | .set macro | ||
271 | .set reorder | ||
272 | |||
273 | lw $4,-4($9) | ||
274 | #nop | ||
275 | multu $7,$4 | ||
276 | mfhi $4 | ||
277 | mflo $5 | ||
278 | #nop | ||
279 | move $3,$6 | ||
280 | move $2,$0 | ||
281 | addu $8,$8,-1 | ||
282 | addu $5,$5,$3 | ||
283 | sltu $6,$5,$3 | ||
284 | addu $4,$4,$2 | ||
285 | addu $4,$4,$6 | ||
286 | srl $3,$4,0 | ||
287 | move $2,$0 | ||
288 | move $6,$3 | ||
289 | .set noreorder | ||
290 | .set nomacro | ||
291 | beq $8,$0,$L11 | ||
292 | sw $5,-4($10) | ||
293 | .set macro | ||
294 | .set reorder | ||
295 | |||
296 | lw $4,0($9) | ||
297 | #nop | ||
298 | multu $7,$4 | ||
299 | mfhi $4 | ||
300 | mflo $5 | ||
301 | #nop | ||
302 | move $3,$6 | ||
303 | move $2,$0 | ||
304 | addu $8,$8,-1 | ||
305 | addu $5,$5,$3 | ||
306 | sltu $6,$5,$3 | ||
307 | addu $4,$4,$2 | ||
308 | addu $4,$4,$6 | ||
309 | srl $3,$4,0 | ||
310 | move $2,$0 | ||
311 | move $6,$3 | ||
312 | .set noreorder | ||
313 | .set nomacro | ||
314 | beq $8,$0,$L11 | ||
315 | sw $5,0($10) | ||
316 | .set macro | ||
317 | .set reorder | ||
318 | |||
319 | addu $9,$9,16 | ||
320 | addu $12,$12,16 | ||
321 | addu $10,$10,16 | ||
322 | .set noreorder | ||
323 | .set nomacro | ||
324 | j $L10 | ||
325 | addu $11,$11,16 | ||
326 | .set macro | ||
327 | .set reorder | ||
328 | |||
329 | $L11: | ||
330 | .set noreorder | ||
331 | .set nomacro | ||
332 | j $31 | ||
333 | move $2,$6 | ||
334 | .set macro | ||
335 | .set reorder | ||
336 | |||
337 | .end bn_mul_words | ||
338 | .align 2 | ||
339 | .globl bn_sqr_words | ||
340 | .ent bn_sqr_words | ||
341 | bn_sqr_words: | ||
342 | .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, extra= 0 | ||
343 | .mask 0x00000000,0 | ||
344 | .fmask 0x00000000,0 | ||
345 | .set noreorder | ||
346 | .cpload $25 | ||
347 | .set reorder | ||
348 | move $9,$4 | ||
349 | addu $7,$9,28 | ||
350 | addu $8,$5,12 | ||
351 | $L18: | ||
352 | lw $2,0($5) | ||
353 | #nop | ||
354 | multu $2,$2 | ||
355 | mfhi $2 | ||
356 | mflo $3 | ||
357 | #nop | ||
358 | addu $6,$6,-1 | ||
359 | sw $3,0($9) | ||
360 | srl $3,$2,0 | ||
361 | move $2,$0 | ||
362 | .set noreorder | ||
363 | .set nomacro | ||
364 | beq $6,$0,$L19 | ||
365 | sw $3,-24($7) | ||
366 | .set macro | ||
367 | .set reorder | ||
368 | |||
369 | lw $2,-8($8) | ||
370 | #nop | ||
371 | multu $2,$2 | ||
372 | mfhi $2 | ||
373 | mflo $3 | ||
374 | #nop | ||
375 | addu $6,$6,-1 | ||
376 | sw $3,-20($7) | ||
377 | srl $3,$2,0 | ||
378 | move $2,$0 | ||
379 | .set noreorder | ||
380 | .set nomacro | ||
381 | beq $6,$0,$L19 | ||
382 | sw $3,-16($7) | ||
383 | .set macro | ||
384 | .set reorder | ||
385 | |||
386 | lw $2,-4($8) | ||
387 | #nop | ||
388 | multu $2,$2 | ||
389 | mfhi $2 | ||
390 | mflo $3 | ||
391 | #nop | ||
392 | addu $6,$6,-1 | ||
393 | sw $3,-12($7) | ||
394 | srl $3,$2,0 | ||
395 | move $2,$0 | ||
396 | .set noreorder | ||
397 | .set nomacro | ||
398 | beq $6,$0,$L19 | ||
399 | sw $3,-8($7) | ||
400 | .set macro | ||
401 | .set reorder | ||
402 | |||
403 | lw $2,0($8) | ||
404 | #nop | ||
405 | multu $2,$2 | ||
406 | mfhi $2 | ||
407 | mflo $3 | ||
408 | #nop | ||
409 | addu $6,$6,-1 | ||
410 | sw $3,-4($7) | ||
411 | srl $3,$2,0 | ||
412 | move $2,$0 | ||
413 | .set noreorder | ||
414 | .set nomacro | ||
415 | beq $6,$0,$L19 | ||
416 | sw $3,0($7) | ||
417 | .set macro | ||
418 | .set reorder | ||
419 | |||
420 | addu $8,$8,16 | ||
421 | addu $5,$5,16 | ||
422 | addu $7,$7,32 | ||
423 | .set noreorder | ||
424 | .set nomacro | ||
425 | j $L18 | ||
426 | addu $9,$9,32 | ||
427 | .set macro | ||
428 | .set reorder | ||
429 | |||
430 | $L19: | ||
431 | j $31 | ||
432 | .end bn_sqr_words | ||
433 | .rdata | ||
434 | .align 2 | ||
435 | $LC0: | ||
436 | |||
437 | .byte 0x44,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e | ||
438 | .byte 0x20,0x77,0x6f,0x75,0x6c,0x64,0x20,0x6f | ||
439 | .byte 0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0xa | ||
440 | .byte 0x0 | ||
441 | .text | ||
442 | .align 2 | ||
443 | .globl bn_div64 | ||
444 | .ent bn_div64 | ||
445 | bn_div64: | ||
446 | .frame $sp,56,$31 # vars= 0, regs= 7/0, args= 16, extra= 8 | ||
447 | .mask 0x901f0000,-8 | ||
448 | .fmask 0x00000000,0 | ||
449 | .set noreorder | ||
450 | .cpload $25 | ||
451 | .set reorder | ||
452 | subu $sp,$sp,56 | ||
453 | .cprestore 16 | ||
454 | sw $16,24($sp) | ||
455 | move $16,$4 | ||
456 | sw $17,28($sp) | ||
457 | move $17,$5 | ||
458 | sw $18,32($sp) | ||
459 | move $18,$6 | ||
460 | sw $20,40($sp) | ||
461 | move $20,$0 | ||
462 | sw $19,36($sp) | ||
463 | li $19,0x00000002 # 2 | ||
464 | sw $31,48($sp) | ||
465 | .set noreorder | ||
466 | .set nomacro | ||
467 | bne $18,$0,$L26 | ||
468 | sw $28,44($sp) | ||
469 | .set macro | ||
470 | .set reorder | ||
471 | |||
472 | .set noreorder | ||
473 | .set nomacro | ||
474 | j $L43 | ||
475 | li $2,-1 # 0xffffffff | ||
476 | .set macro | ||
477 | .set reorder | ||
478 | |||
479 | $L26: | ||
480 | move $4,$18 | ||
481 | jal BN_num_bits_word | ||
482 | move $4,$2 | ||
483 | li $2,0x00000020 # 32 | ||
484 | .set noreorder | ||
485 | .set nomacro | ||
486 | beq $4,$2,$L27 | ||
487 | li $2,0x00000001 # 1 | ||
488 | .set macro | ||
489 | .set reorder | ||
490 | |||
491 | sll $2,$2,$4 | ||
492 | sltu $2,$2,$16 | ||
493 | .set noreorder | ||
494 | .set nomacro | ||
495 | beq $2,$0,$L44 | ||
496 | li $5,0x00000020 # 32 | ||
497 | .set macro | ||
498 | .set reorder | ||
499 | |||
500 | la $4,__iob+32 | ||
501 | la $5,$LC0 | ||
502 | jal fprintf | ||
503 | jal abort | ||
504 | $L27: | ||
505 | li $5,0x00000020 # 32 | ||
506 | $L44: | ||
507 | sltu $2,$16,$18 | ||
508 | .set noreorder | ||
509 | .set nomacro | ||
510 | bne $2,$0,$L28 | ||
511 | subu $4,$5,$4 | ||
512 | .set macro | ||
513 | .set reorder | ||
514 | |||
515 | subu $16,$16,$18 | ||
516 | $L28: | ||
517 | .set noreorder | ||
518 | .set nomacro | ||
519 | beq $4,$0,$L29 | ||
520 | li $10,-65536 # 0xffff0000 | ||
521 | .set macro | ||
522 | .set reorder | ||
523 | |||
524 | sll $18,$18,$4 | ||
525 | sll $3,$16,$4 | ||
526 | subu $2,$5,$4 | ||
527 | srl $2,$17,$2 | ||
528 | or $16,$3,$2 | ||
529 | sll $17,$17,$4 | ||
530 | $L29: | ||
531 | srl $7,$18,16 | ||
532 | andi $9,$18,0xffff | ||
533 | $L30: | ||
534 | srl $2,$16,16 | ||
535 | .set noreorder | ||
536 | .set nomacro | ||
537 | beq $2,$7,$L34 | ||
538 | li $6,0x0000ffff # 65535 | ||
539 | .set macro | ||
540 | .set reorder | ||
541 | |||
542 | divu $6,$16,$7 | ||
543 | $L34: | ||
544 | mult $6,$9 | ||
545 | mflo $5 | ||
546 | #nop | ||
547 | #nop | ||
548 | mult $6,$7 | ||
549 | and $2,$17,$10 | ||
550 | srl $8,$2,16 | ||
551 | mflo $4 | ||
552 | $L35: | ||
553 | subu $3,$16,$4 | ||
554 | and $2,$3,$10 | ||
555 | .set noreorder | ||
556 | .set nomacro | ||
557 | bne $2,$0,$L36 | ||
558 | sll $2,$3,16 | ||
559 | .set macro | ||
560 | .set reorder | ||
561 | |||
562 | addu $2,$2,$8 | ||
563 | sltu $2,$2,$5 | ||
564 | .set noreorder | ||
565 | .set nomacro | ||
566 | beq $2,$0,$L36 | ||
567 | subu $5,$5,$9 | ||
568 | .set macro | ||
569 | .set reorder | ||
570 | |||
571 | subu $4,$4,$7 | ||
572 | .set noreorder | ||
573 | .set nomacro | ||
574 | j $L35 | ||
575 | addu $6,$6,-1 | ||
576 | .set macro | ||
577 | .set reorder | ||
578 | |||
579 | $L36: | ||
580 | mult $6,$7 | ||
581 | mflo $5 | ||
582 | #nop | ||
583 | #nop | ||
584 | mult $6,$9 | ||
585 | mflo $4 | ||
586 | #nop | ||
587 | #nop | ||
588 | srl $3,$4,16 | ||
589 | sll $2,$4,16 | ||
590 | and $4,$2,$10 | ||
591 | sltu $2,$17,$4 | ||
592 | .set noreorder | ||
593 | .set nomacro | ||
594 | beq $2,$0,$L40 | ||
595 | addu $5,$5,$3 | ||
596 | .set macro | ||
597 | .set reorder | ||
598 | |||
599 | addu $5,$5,1 | ||
600 | $L40: | ||
601 | sltu $2,$16,$5 | ||
602 | .set noreorder | ||
603 | .set nomacro | ||
604 | beq $2,$0,$L41 | ||
605 | subu $17,$17,$4 | ||
606 | .set macro | ||
607 | .set reorder | ||
608 | |||
609 | addu $16,$16,$18 | ||
610 | addu $6,$6,-1 | ||
611 | $L41: | ||
612 | addu $19,$19,-1 | ||
613 | .set noreorder | ||
614 | .set nomacro | ||
615 | beq $19,$0,$L31 | ||
616 | subu $16,$16,$5 | ||
617 | .set macro | ||
618 | .set reorder | ||
619 | |||
620 | sll $20,$6,16 | ||
621 | sll $3,$16,16 | ||
622 | srl $2,$17,16 | ||
623 | or $16,$3,$2 | ||
624 | .set noreorder | ||
625 | .set nomacro | ||
626 | j $L30 | ||
627 | sll $17,$17,16 | ||
628 | .set macro | ||
629 | .set reorder | ||
630 | |||
631 | $L31: | ||
632 | or $2,$20,$6 | ||
633 | $L43: | ||
634 | lw $31,48($sp) | ||
635 | lw $20,40($sp) | ||
636 | lw $19,36($sp) | ||
637 | lw $18,32($sp) | ||
638 | lw $17,28($sp) | ||
639 | lw $16,24($sp) | ||
640 | addu $sp,$sp,56 | ||
641 | j $31 | ||
642 | .end bn_div64 | ||
643 | |||
644 | .globl abort .text | ||
645 | .globl fprintf .text | ||
646 | .globl BN_num_bits_word .text | ||