diff options
Diffstat (limited to 'src/lib/libcrypto/bn/asm/mips1.s')
-rw-r--r-- | src/lib/libcrypto/bn/asm/mips1.s | 539 |
1 files changed, 539 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bn/asm/mips1.s b/src/lib/libcrypto/bn/asm/mips1.s new file mode 100644 index 0000000000..44fa1254c7 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/mips1.s | |||
@@ -0,0 +1,539 @@ | |||
1 | /* This assember is for R2000/R3000 machines, or higher ones that do | ||
2 | * no want to do any 64 bit arithmatic. | ||
3 | * Make sure that the SSLeay bignum library is compiled with | ||
4 | * THIRTY_TWO_BIT set. | ||
5 | * This must either be compiled with the system CC, or, if you use GNU gas, | ||
6 | * cc -E mips1.s|gas -o mips1.o | ||
7 | */ | ||
8 | .set reorder | ||
9 | .set noat | ||
10 | |||
11 | #define R1 $1 | ||
12 | #define CC $2 | ||
13 | #define R2 $3 | ||
14 | #define R3 $8 | ||
15 | #define R4 $9 | ||
16 | #define L1 $10 | ||
17 | #define L2 $11 | ||
18 | #define L3 $12 | ||
19 | #define L4 $13 | ||
20 | #define H1 $14 | ||
21 | #define H2 $15 | ||
22 | #define H3 $24 | ||
23 | #define H4 $25 | ||
24 | |||
25 | #define P1 $4 | ||
26 | #define P2 $5 | ||
27 | #define P3 $6 | ||
28 | #define P4 $7 | ||
29 | |||
30 | .align 2 | ||
31 | .ent bn_mul_add_words | ||
32 | .globl bn_mul_add_words | ||
33 | .text | ||
34 | bn_mul_add_words: | ||
35 | .frame $sp,0,$31 | ||
36 | .mask 0x00000000,0 | ||
37 | .fmask 0x00000000,0 | ||
38 | |||
39 | #blt P3,4,$lab34 | ||
40 | |||
41 | subu R1,P3,4 | ||
42 | move CC,$0 | ||
43 | bltz R1,$lab34 | ||
44 | $lab2: | ||
45 | lw R1,0(P1) | ||
46 | lw L1,0(P2) | ||
47 | lw R2,4(P1) | ||
48 | lw L2,4(P2) | ||
49 | lw R3,8(P1) | ||
50 | lw L3,8(P2) | ||
51 | lw R4,12(P1) | ||
52 | lw L4,12(P2) | ||
53 | multu L1,P4 | ||
54 | addu R1,R1,CC | ||
55 | mflo L1 | ||
56 | sltu CC,R1,CC | ||
57 | addu R1,R1,L1 | ||
58 | mfhi H1 | ||
59 | sltu L1,R1,L1 | ||
60 | sw R1,0(P1) | ||
61 | addu CC,CC,L1 | ||
62 | multu L2,P4 | ||
63 | addu CC,H1,CC | ||
64 | mflo L2 | ||
65 | addu R2,R2,CC | ||
66 | sltu CC,R2,CC | ||
67 | mfhi H2 | ||
68 | addu R2,R2,L2 | ||
69 | addu P2,P2,16 | ||
70 | sltu L2,R2,L2 | ||
71 | sw R2,4(P1) | ||
72 | addu CC,CC,L2 | ||
73 | multu L3,P4 | ||
74 | addu CC,H2,CC | ||
75 | mflo L3 | ||
76 | addu R3,R3,CC | ||
77 | sltu CC,R3,CC | ||
78 | mfhi H3 | ||
79 | addu R3,R3,L3 | ||
80 | addu P1,P1,16 | ||
81 | sltu L3,R3,L3 | ||
82 | sw R3,-8(P1) | ||
83 | addu CC,CC,L3 | ||
84 | multu L4,P4 | ||
85 | addu CC,H3,CC | ||
86 | mflo L4 | ||
87 | addu R4,R4,CC | ||
88 | sltu CC,R4,CC | ||
89 | mfhi H4 | ||
90 | addu R4,R4,L4 | ||
91 | subu P3,P3,4 | ||
92 | sltu L4,R4,L4 | ||
93 | addu CC,CC,L4 | ||
94 | addu CC,H4,CC | ||
95 | |||
96 | subu R1,P3,4 | ||
97 | sw R4,-4(P1) # delay slot | ||
98 | bgez R1,$lab2 | ||
99 | |||
100 | bleu P3,0,$lab3 | ||
101 | .align 2 | ||
102 | $lab33: | ||
103 | lw L1,0(P2) | ||
104 | lw R1,0(P1) | ||
105 | multu L1,P4 | ||
106 | addu R1,R1,CC | ||
107 | sltu CC,R1,CC | ||
108 | addu P1,P1,4 | ||
109 | mflo L1 | ||
110 | mfhi H1 | ||
111 | addu R1,R1,L1 | ||
112 | addu P2,P2,4 | ||
113 | sltu L1,R1,L1 | ||
114 | subu P3,P3,1 | ||
115 | addu CC,CC,L1 | ||
116 | sw R1,-4(P1) | ||
117 | addu CC,H1,CC | ||
118 | bgtz P3,$lab33 | ||
119 | j $31 | ||
120 | .align 2 | ||
121 | $lab3: | ||
122 | j $31 | ||
123 | .align 2 | ||
124 | $lab34: | ||
125 | bgt P3,0,$lab33 | ||
126 | j $31 | ||
127 | .end bn_mul_add_words | ||
128 | |||
129 | .align 2 | ||
130 | # Program Unit: bn_mul_words | ||
131 | .ent bn_mul_words | ||
132 | .globl bn_mul_words | ||
133 | .text | ||
134 | bn_mul_words: | ||
135 | .frame $sp,0,$31 | ||
136 | .mask 0x00000000,0 | ||
137 | .fmask 0x00000000,0 | ||
138 | |||
139 | subu P3,P3,4 | ||
140 | move CC,$0 | ||
141 | bltz P3,$lab45 | ||
142 | $lab44: | ||
143 | lw L1,0(P2) | ||
144 | lw L2,4(P2) | ||
145 | lw L3,8(P2) | ||
146 | lw L4,12(P2) | ||
147 | multu L1,P4 | ||
148 | subu P3,P3,4 | ||
149 | mflo L1 | ||
150 | mfhi H1 | ||
151 | addu L1,L1,CC | ||
152 | multu L2,P4 | ||
153 | sltu CC,L1,CC | ||
154 | sw L1,0(P1) | ||
155 | addu CC,H1,CC | ||
156 | mflo L2 | ||
157 | mfhi H2 | ||
158 | addu L2,L2,CC | ||
159 | multu L3,P4 | ||
160 | sltu CC,L2,CC | ||
161 | sw L2,4(P1) | ||
162 | addu CC,H2,CC | ||
163 | mflo L3 | ||
164 | mfhi H3 | ||
165 | addu L3,L3,CC | ||
166 | multu L4,P4 | ||
167 | sltu CC,L3,CC | ||
168 | sw L3,8(P1) | ||
169 | addu CC,H3,CC | ||
170 | mflo L4 | ||
171 | mfhi H4 | ||
172 | addu L4,L4,CC | ||
173 | addu P1,P1,16 | ||
174 | sltu CC,L4,CC | ||
175 | addu P2,P2,16 | ||
176 | addu CC,H4,CC | ||
177 | sw L4,-4(P1) | ||
178 | |||
179 | bgez P3,$lab44 | ||
180 | b $lab45 | ||
181 | $lab46: | ||
182 | lw L1,0(P2) | ||
183 | addu P1,P1,4 | ||
184 | multu L1,P4 | ||
185 | addu P2,P2,4 | ||
186 | mflo L1 | ||
187 | mfhi H1 | ||
188 | addu L1,L1,CC | ||
189 | subu P3,P3,1 | ||
190 | sltu CC,L1,CC | ||
191 | sw L1,-4(P1) | ||
192 | addu CC,H1,CC | ||
193 | bgtz P3,$lab46 | ||
194 | j $31 | ||
195 | $lab45: | ||
196 | addu P3,P3,4 | ||
197 | bgtz P3,$lab46 | ||
198 | j $31 | ||
199 | .align 2 | ||
200 | .end bn_mul_words | ||
201 | |||
202 | # Program Unit: bn_sqr_words | ||
203 | .ent bn_sqr_words | ||
204 | .globl bn_sqr_words | ||
205 | .text | ||
206 | bn_sqr_words: | ||
207 | .frame $sp,0,$31 | ||
208 | .mask 0x00000000,0 | ||
209 | .fmask 0x00000000,0 | ||
210 | |||
211 | subu P3,P3,4 | ||
212 | bltz P3,$lab55 | ||
213 | $lab54: | ||
214 | lw L1,0(P2) | ||
215 | lw L2,4(P2) | ||
216 | lw L3,8(P2) | ||
217 | lw L4,12(P2) | ||
218 | |||
219 | multu L1,L1 | ||
220 | subu P3,P3,4 | ||
221 | mflo L1 | ||
222 | mfhi H1 | ||
223 | sw L1,0(P1) | ||
224 | sw H1,4(P1) | ||
225 | |||
226 | multu L2,L2 | ||
227 | addu P1,P1,32 | ||
228 | mflo L2 | ||
229 | mfhi H2 | ||
230 | sw L2,-24(P1) | ||
231 | sw H2,-20(P1) | ||
232 | |||
233 | multu L3,L3 | ||
234 | addu P2,P2,16 | ||
235 | mflo L3 | ||
236 | mfhi H3 | ||
237 | sw L3,-16(P1) | ||
238 | sw H3,-12(P1) | ||
239 | |||
240 | multu L4,L4 | ||
241 | |||
242 | mflo L4 | ||
243 | mfhi H4 | ||
244 | sw L4,-8(P1) | ||
245 | sw H4,-4(P1) | ||
246 | |||
247 | bgtz P3,$lab54 | ||
248 | b $lab55 | ||
249 | $lab56: | ||
250 | lw L1,0(P2) | ||
251 | addu P1,P1,8 | ||
252 | multu L1,L1 | ||
253 | addu P2,P2,4 | ||
254 | subu P3,P3,1 | ||
255 | mflo L1 | ||
256 | mfhi H1 | ||
257 | sw L1,-8(P1) | ||
258 | sw H1,-4(P1) | ||
259 | |||
260 | bgtz P3,$lab56 | ||
261 | j $31 | ||
262 | $lab55: | ||
263 | addu P3,P3,4 | ||
264 | bgtz P3,$lab56 | ||
265 | j $31 | ||
266 | .align 2 | ||
267 | .end bn_sqr_words | ||
268 | |||
269 | # Program Unit: bn_add_words | ||
270 | .ent bn_add_words | ||
271 | .globl bn_add_words | ||
272 | .text | ||
273 | bn_add_words: # 0x590 | ||
274 | .frame $sp,0,$31 | ||
275 | .mask 0x00000000,0 | ||
276 | .fmask 0x00000000,0 | ||
277 | |||
278 | subu P4,P4,4 | ||
279 | move CC,$0 | ||
280 | bltz P4,$lab65 | ||
281 | $lab64: | ||
282 | lw L1,0(P2) | ||
283 | lw R1,0(P3) | ||
284 | lw L2,4(P2) | ||
285 | lw R2,4(P3) | ||
286 | |||
287 | addu L1,L1,CC | ||
288 | lw L3,8(P2) | ||
289 | sltu CC,L1,CC | ||
290 | addu L1,L1,R1 | ||
291 | sltu R1,L1,R1 | ||
292 | lw R3,8(P3) | ||
293 | addu CC,CC,R1 | ||
294 | lw L4,12(P2) | ||
295 | |||
296 | addu L2,L2,CC | ||
297 | lw R4,12(P3) | ||
298 | sltu CC,L2,CC | ||
299 | addu L2,L2,R2 | ||
300 | sltu R2,L2,R2 | ||
301 | sw L1,0(P1) | ||
302 | addu CC,CC,R2 | ||
303 | addu P1,P1,16 | ||
304 | addu L3,L3,CC | ||
305 | sw L2,-12(P1) | ||
306 | |||
307 | sltu CC,L3,CC | ||
308 | addu L3,L3,R3 | ||
309 | sltu R3,L3,R3 | ||
310 | addu P2,P2,16 | ||
311 | addu CC,CC,R3 | ||
312 | |||
313 | addu L4,L4,CC | ||
314 | addu P3,P3,16 | ||
315 | sltu CC,L4,CC | ||
316 | addu L4,L4,R4 | ||
317 | subu P4,P4,4 | ||
318 | sltu R4,L4,R4 | ||
319 | sw L3,-8(P1) | ||
320 | addu CC,CC,R4 | ||
321 | sw L4,-4(P1) | ||
322 | |||
323 | bgtz P4,$lab64 | ||
324 | b $lab65 | ||
325 | $lab66: | ||
326 | lw L1,0(P2) | ||
327 | lw R1,0(P3) | ||
328 | addu L1,L1,CC | ||
329 | addu P1,P1,4 | ||
330 | sltu CC,L1,CC | ||
331 | addu P2,P2,4 | ||
332 | addu P3,P3,4 | ||
333 | addu L1,L1,R1 | ||
334 | subu P4,P4,1 | ||
335 | sltu R1,L1,R1 | ||
336 | sw L1,-4(P1) | ||
337 | addu CC,CC,R1 | ||
338 | |||
339 | bgtz P4,$lab66 | ||
340 | j $31 | ||
341 | $lab65: | ||
342 | addu P4,P4,4 | ||
343 | bgtz P4,$lab66 | ||
344 | j $31 | ||
345 | .end bn_add_words | ||
346 | |||
347 | # Program Unit: bn_div64 | ||
348 | .set at | ||
349 | .set reorder | ||
350 | .text | ||
351 | .align 2 | ||
352 | .globl bn_div64 | ||
353 | # 321 { | ||
354 | .ent bn_div64 2 | ||
355 | bn_div64: | ||
356 | subu $sp, 64 | ||
357 | sw $31, 56($sp) | ||
358 | sw $16, 48($sp) | ||
359 | .mask 0x80010000, -56 | ||
360 | .frame $sp, 64, $31 | ||
361 | move $9, $4 | ||
362 | move $12, $5 | ||
363 | move $16, $6 | ||
364 | # 322 BN_ULONG dh,dl,q,ret=0,th,tl,t; | ||
365 | move $31, $0 | ||
366 | # 323 int i,count=2; | ||
367 | li $13, 2 | ||
368 | # 324 | ||
369 | # 325 if (d == 0) return(BN_MASK2); | ||
370 | bne $16, 0, $80 | ||
371 | li $2, -1 | ||
372 | b $93 | ||
373 | $80: | ||
374 | # 326 | ||
375 | # 327 i=BN_num_bits_word(d); | ||
376 | move $4, $16 | ||
377 | sw $31, 16($sp) | ||
378 | sw $9, 24($sp) | ||
379 | sw $12, 32($sp) | ||
380 | sw $13, 40($sp) | ||
381 | .livereg 0x800ff0e,0xfff | ||
382 | jal BN_num_bits_word | ||
383 | li $4, 32 | ||
384 | lw $31, 16($sp) | ||
385 | lw $9, 24($sp) | ||
386 | lw $12, 32($sp) | ||
387 | lw $13, 40($sp) | ||
388 | move $3, $2 | ||
389 | # 328 if ((i != BN_BITS2) && (h > (BN_ULONG)1<<i)) | ||
390 | beq $2, $4, $81 | ||
391 | li $14, 1 | ||
392 | sll $15, $14, $2 | ||
393 | bleu $9, $15, $81 | ||
394 | # 329 { | ||
395 | # 330 #if !defined(NO_STDIO) && !defined(WIN16) | ||
396 | # 331 fprintf(stderr,"Division would overflow (%d)\n",i); | ||
397 | # 332 #endif | ||
398 | # 333 abort(); | ||
399 | sw $3, 8($sp) | ||
400 | sw $9, 24($sp) | ||
401 | sw $12, 32($sp) | ||
402 | sw $13, 40($sp) | ||
403 | sw $31, 26($sp) | ||
404 | .livereg 0xff0e,0xfff | ||
405 | jal abort | ||
406 | lw $3, 8($sp) | ||
407 | li $4, 32 | ||
408 | lw $9, 24($sp) | ||
409 | lw $12, 32($sp) | ||
410 | lw $13, 40($sp) | ||
411 | lw $31, 26($sp) | ||
412 | # 334 } | ||
413 | $81: | ||
414 | # 335 i=BN_BITS2-i; | ||
415 | subu $3, $4, $3 | ||
416 | # 336 if (h >= d) h-=d; | ||
417 | bltu $9, $16, $82 | ||
418 | subu $9, $9, $16 | ||
419 | $82: | ||
420 | # 337 | ||
421 | # 338 if (i) | ||
422 | beq $3, 0, $83 | ||
423 | # 339 { | ||
424 | # 340 d<<=i; | ||
425 | sll $16, $16, $3 | ||
426 | # 341 h=(h<<i)|(l>>(BN_BITS2-i)); | ||
427 | sll $24, $9, $3 | ||
428 | subu $25, $4, $3 | ||
429 | srl $14, $12, $25 | ||
430 | or $9, $24, $14 | ||
431 | # 342 l<<=i; | ||
432 | sll $12, $12, $3 | ||
433 | # 343 } | ||
434 | $83: | ||
435 | # 344 dh=(d&BN_MASK2h)>>BN_BITS4; | ||
436 | # 345 dl=(d&BN_MASK2l); | ||
437 | and $8, $16, -65536 | ||
438 | srl $8, $8, 16 | ||
439 | and $10, $16, 65535 | ||
440 | li $6, -65536 | ||
441 | $84: | ||
442 | # 346 for (;;) | ||
443 | # 347 { | ||
444 | # 348 if ((h>>BN_BITS4) == dh) | ||
445 | srl $15, $9, 16 | ||
446 | bne $8, $15, $85 | ||
447 | # 349 q=BN_MASK2l; | ||
448 | li $5, 65535 | ||
449 | b $86 | ||
450 | $85: | ||
451 | # 350 else | ||
452 | # 351 q=h/dh; | ||
453 | divu $5, $9, $8 | ||
454 | $86: | ||
455 | # 352 | ||
456 | # 353 for (;;) | ||
457 | # 354 { | ||
458 | # 355 t=(h-q*dh); | ||
459 | mul $4, $5, $8 | ||
460 | subu $2, $9, $4 | ||
461 | move $3, $2 | ||
462 | # 356 if ((t&BN_MASK2h) || | ||
463 | # 357 ((dl*q) <= ( | ||
464 | # 358 (t<<BN_BITS4)+ | ||
465 | # 359 ((l&BN_MASK2h)>>BN_BITS4)))) | ||
466 | and $25, $2, $6 | ||
467 | bne $25, $0, $87 | ||
468 | mul $24, $10, $5 | ||
469 | sll $14, $3, 16 | ||
470 | and $15, $12, $6 | ||
471 | srl $25, $15, 16 | ||
472 | addu $15, $14, $25 | ||
473 | bgtu $24, $15, $88 | ||
474 | $87: | ||
475 | # 360 break; | ||
476 | mul $3, $10, $5 | ||
477 | b $89 | ||
478 | $88: | ||
479 | # 361 q--; | ||
480 | addu $5, $5, -1 | ||
481 | # 362 } | ||
482 | b $86 | ||
483 | $89: | ||
484 | # 363 th=q*dh; | ||
485 | # 364 tl=q*dl; | ||
486 | # 365 t=(tl>>BN_BITS4); | ||
487 | # 366 tl=(tl<<BN_BITS4)&BN_MASK2h; | ||
488 | sll $14, $3, 16 | ||
489 | and $2, $14, $6 | ||
490 | move $11, $2 | ||
491 | # 367 th+=t; | ||
492 | srl $25, $3, 16 | ||
493 | addu $7, $4, $25 | ||
494 | # 368 | ||
495 | # 369 if (l < tl) th++; | ||
496 | bgeu $12, $2, $90 | ||
497 | addu $7, $7, 1 | ||
498 | $90: | ||
499 | # 370 l-=tl; | ||
500 | subu $12, $12, $11 | ||
501 | # 371 if (h < th) | ||
502 | bgeu $9, $7, $91 | ||
503 | # 372 { | ||
504 | # 373 h+=d; | ||
505 | addu $9, $9, $16 | ||
506 | # 374 q--; | ||
507 | addu $5, $5, -1 | ||
508 | # 375 } | ||
509 | $91: | ||
510 | # 376 h-=th; | ||
511 | subu $9, $9, $7 | ||
512 | # 377 | ||
513 | # 378 if (--count == 0) break; | ||
514 | addu $13, $13, -1 | ||
515 | beq $13, 0, $92 | ||
516 | # 379 | ||
517 | # 380 ret=q<<BN_BITS4; | ||
518 | sll $31, $5, 16 | ||
519 | # 381 h=((h<<BN_BITS4)|(l>>BN_BITS4))&BN_MASK2; | ||
520 | sll $24, $9, 16 | ||
521 | srl $15, $12, 16 | ||
522 | or $9, $24, $15 | ||
523 | # 382 l=(l&BN_MASK2l)<<BN_BITS4; | ||
524 | and $12, $12, 65535 | ||
525 | sll $12, $12, 16 | ||
526 | # 383 } | ||
527 | b $84 | ||
528 | $92: | ||
529 | # 384 ret|=q; | ||
530 | or $31, $31, $5 | ||
531 | # 385 return(ret); | ||
532 | move $2, $31 | ||
533 | $93: | ||
534 | lw $16, 48($sp) | ||
535 | lw $31, 56($sp) | ||
536 | addu $sp, 64 | ||
537 | j $31 | ||
538 | .end bn_div64 | ||
539 | |||