+++ /dev/null
-/* This assember is for R4000 and above machines. It takes advantage
- * of the 64 bit registers present on these CPUs.
- * Make sure that the SSLeay bignum library is compiled with
- * SIXTY_FOUR_BIT set and BN_LLONG undefined.
- * This must either be compiled with the system CC, or, if you use GNU gas,
- * cc -E mips3.s|gas -o mips3.o
- */
- .set reorder
- .set noat
-
-#define R1 $1
-#define CC $2
-#define R2 $3
-#define R3 $8
-#define R4 $9
-#define L1 $10
-#define L2 $11
-#define L3 $12
-#define L4 $13
-#define H1 $14
-#define H2 $15
-#define H3 $24
-#define H4 $25
-
-#define P1 $4
-#define P2 $5
-#define P3 $6
-#define P4 $7
-
- .align 2
- .ent bn_mul_add_words
- .globl bn_mul_add_words
-.text
-bn_mul_add_words:
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- #blt P3,4,$lab34
-
- subu R1,P3,4
- move CC,$0
- bltz R1,$lab34
-$lab2:
- ld R1,0(P1)
- ld L1,0(P2)
- ld R2,8(P1)
- ld L2,8(P2)
- ld R3,16(P1)
- ld L3,16(P2)
- ld R4,24(P1)
- ld L4,24(P2)
- dmultu L1,P4
- daddu R1,R1,CC
- mflo L1
- sltu CC,R1,CC
- daddu R1,R1,L1
- mfhi H1
- sltu L1,R1,L1
- sd R1,0(P1)
- daddu CC,CC,L1
- dmultu L2,P4
- daddu CC,H1,CC
- mflo L2
- daddu R2,R2,CC
- sltu CC,R2,CC
- mfhi H2
- daddu R2,R2,L2
- daddu P2,P2,32
- sltu L2,R2,L2
- sd R2,8(P1)
- daddu CC,CC,L2
- dmultu L3,P4
- daddu CC,H2,CC
- mflo L3
- daddu R3,R3,CC
- sltu CC,R3,CC
- mfhi H3
- daddu R3,R3,L3
- daddu P1,P1,32
- sltu L3,R3,L3
- sd R3,-16(P1)
- daddu CC,CC,L3
- dmultu L4,P4
- daddu CC,H3,CC
- mflo L4
- daddu R4,R4,CC
- sltu CC,R4,CC
- mfhi H4
- daddu R4,R4,L4
- subu P3,P3,4
- sltu L4,R4,L4
- daddu CC,CC,L4
- daddu CC,H4,CC
-
- subu R1,P3,4
- sd R4,-8(P1) # delay slot
- bgez R1,$lab2
-
- bleu P3,0,$lab3
- .align 2
-$lab33:
- ld L1,0(P2)
- ld R1,0(P1)
- dmultu L1,P4
- daddu R1,R1,CC
- sltu CC,R1,CC
- daddu P1,P1,8
- mflo L1
- mfhi H1
- daddu R1,R1,L1
- daddu P2,P2,8
- sltu L1,R1,L1
- subu P3,P3,1
- daddu CC,CC,L1
- sd R1,-8(P1)
- daddu CC,H1,CC
- bgtz P3,$lab33
- j $31
- .align 2
-$lab3:
- j $31
- .align 2
-$lab34:
- bgt P3,0,$lab33
- j $31
- .end bn_mul_add_words
-
- .align 2
- # Program Unit: bn_mul_words
- .ent bn_mul_words
- .globl bn_mul_words
-.text
-bn_mul_words:
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- subu P3,P3,4
- move CC,$0
- bltz P3,$lab45
-$lab44:
- ld L1,0(P2)
- ld L2,8(P2)
- ld L3,16(P2)
- ld L4,24(P2)
- dmultu L1,P4
- subu P3,P3,4
- mflo L1
- mfhi H1
- daddu L1,L1,CC
- dmultu L2,P4
- sltu CC,L1,CC
- sd L1,0(P1)
- daddu CC,H1,CC
- mflo L2
- mfhi H2
- daddu L2,L2,CC
- dmultu L3,P4
- sltu CC,L2,CC
- sd L2,8(P1)
- daddu CC,H2,CC
- mflo L3
- mfhi H3
- daddu L3,L3,CC
- dmultu L4,P4
- sltu CC,L3,CC
- sd L3,16(P1)
- daddu CC,H3,CC
- mflo L4
- mfhi H4
- daddu L4,L4,CC
- daddu P1,P1,32
- sltu CC,L4,CC
- daddu P2,P2,32
- daddu CC,H4,CC
- sd L4,-8(P1)
-
- bgez P3,$lab44
- b $lab45
-$lab46:
- ld L1,0(P2)
- daddu P1,P1,8
- dmultu L1,P4
- daddu P2,P2,8
- mflo L1
- mfhi H1
- daddu L1,L1,CC
- subu P3,P3,1
- sltu CC,L1,CC
- sd L1,-8(P1)
- daddu CC,H1,CC
- bgtz P3,$lab46
- j $31
-$lab45:
- addu P3,P3,4
- bgtz P3,$lab46
- j $31
- .align 2
- .end bn_mul_words
-
- # Program Unit: bn_sqr_words
- .ent bn_sqr_words
- .globl bn_sqr_words
-.text
-bn_sqr_words:
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- subu P3,P3,4
- b $lab55
- bltz P3,$lab55
-$lab54:
- ld L1,0(P2)
- ld L2,8(P2)
- ld L3,16(P2)
- ld L4,24(P2)
-
- dmultu L1,L1
- subu P3,P3,4
- mflo L1
- mfhi H1
- sd L1,0(P1)
- sd H1,8(P1)
-
- dmultu L2,L2
- daddu P1,P1,32
- mflo L2
- mfhi H2
- sd L2,-48(P1)
- sd H2,-40(P1)
-
- dmultu L3,L3
- daddu P2,P2,32
- mflo L3
- mfhi H3
- sd L3,-32(P1)
- sd H3,-24(P1)
-
- dmultu L4,L4
-
- mflo L4
- mfhi H4
- sd L4,-16(P1)
- sd H4,-8(P1)
-
- bgtz P3,$lab54
- b $lab55
-$lab56:
- ld L1,0(P2)
- daddu P1,P1,16
- dmultu L1,L1
- daddu P2,P2,8
- subu P3,P3,1
- mflo L1
- mfhi H1
- sd L1,-16(P1)
- sd H1,-8(P1)
-
- bgtz P3,$lab56
- j $31
-$lab55:
- daddu P3,P3,4
- bgtz P3,$lab56
- j $31
- .align 2
- .end bn_sqr_words
-
- # Program Unit: bn_add_words
- .ent bn_add_words
- .globl bn_add_words
-.text
-bn_add_words: # 0x590
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- subu P4,P4,4
- move CC,$0
- bltz P4,$lab65
-$lab64:
- ld L1,0(P2)
- ld R1,0(P3)
- ld L2,8(P2)
- ld R2,8(P3)
-
- daddu L1,L1,CC
- ld L3,16(P2)
- sltu CC,L1,CC
- daddu L1,L1,R1
- sltu R1,L1,R1
- ld R3,16(P3)
- daddu CC,CC,R1
- ld L4,24(P2)
-
- daddu L2,L2,CC
- ld R4,24(P3)
- sltu CC,L2,CC
- daddu L2,L2,R2
- sltu R2,L2,R2
- sd L1,0(P1)
- daddu CC,CC,R2
- daddu P1,P1,32
- daddu L3,L3,CC
- sd L2,-24(P1)
-
- sltu CC,L3,CC
- daddu L3,L3,R3
- sltu R3,L3,R3
- daddu P2,P2,32
- daddu CC,CC,R3
-
- daddu L4,L4,CC
- daddu P3,P3,32
- sltu CC,L4,CC
- daddu L4,L4,R4
- sltu R4,L4,R4
- subu P4,P4,4
- sd L3,-16(P1)
- daddu CC,CC,R4
- sd L4,-8(P1)
-
- bgtz P4,$lab64
- b $lab65
-$lab66:
- ld L1,0(P2)
- ld R1,0(P3)
- daddu L1,L1,CC
- daddu P1,P1,8
- sltu CC,L1,CC
- daddu P2,P2,8
- daddu P3,P3,8
- daddu L1,L1,R1
- subu P4,P4,1
- sltu R1,L1,R1
- sd L1,-8(P1)
- daddu CC,CC,R1
-
- bgtz P4,$lab66
- j $31
-$lab65:
- addu P4,P4,4
- bgtz P4,$lab66
- j $31
- .end bn_add_words
-
-#if 1
- # Program Unit: bn_div64
- .set at
- .set reorder
- .text
- .align 2
- .globl bn_div64
- # 321 {
- .ent bn_div64
-bn_div64:
- dsubu $sp, 64
- sd $31, 56($sp)
- sd $16, 48($sp)
- .mask 0x80010000, -56
- .frame $sp, 64, $31
- move $9, $4
- move $12, $5
- move $16, $6
- # 322 BN_ULONG dh,dl,q,ret=0,th,tl,t;
- move $31, $0
- # 323 int i,count=2;
- li $13, 2
- # 324
- # 325 if (d == 0) return(BN_MASK2);
- bne $16, 0, $80
- dli $2, -1
- b $93
-$80:
- # 326
- # 327 i=BN_num_bits_word(d);
- move $4, $16
- sd $31, 16($sp)
- sd $9, 24($sp)
- sd $12, 32($sp)
- sd $13, 40($sp)
- .livereg 0x800ff0e,0xfff
- jal BN_num_bits_word
- dli $4, 64
- ld $31, 16($sp)
- ld $9, 24($sp)
- ld $12, 32($sp)
- ld $13, 40($sp)
- move $3, $2
- # 328 if ((i != BN_BITS2) && (h > (BN_ULONG)1<<i))
- beq $2, $4, $81
- dli $14, 1
- dsll $15, $14, $2
- bleu $9, $15, $81
- # 329 {
- # 330 #if !defined(NO_STDIO) && !defined(WIN16)
- # 331 fprintf(stderr,"Division would overflow (%d)\n",i);
- # 332 #endif
- # 333 abort();
- sd $3, 8($sp)
- sd $31, 16($sp)
- sd $9, 24($sp)
- sd $12, 32($sp)
- sd $13, 40($sp)
- .livereg 0xff0e,0xfff
- jal abort
- dli $4, 64
- ld $3, 8($sp)
- ld $31, 16($sp)
- ld $9, 24($sp)
- ld $12, 32($sp)
- ld $13, 40($sp)
- # 334 }
-$81:
- # 335 i=BN_BITS2-i;
- dsubu $3, $4, $3
- # 336 if (h >= d) h-=d;
- bltu $9, $16, $82
- dsubu $9, $9, $16
-$82:
- # 337
- # 338 if (i)
- beq $3, 0, $83
- # 339 {
- # 340 d<<=i;
- dsll $16, $16, $3
- # 341 h=(h<<i)|(l>>(BN_BITS2-i));
- dsll $24, $9, $3
- dsubu $25, $4, $3
- dsrl $14, $12, $25
- or $9, $24, $14
- # 342 l<<=i;
- dsll $12, $12, $3
- # 343 }
-$83:
- # 344 dh=(d&BN_MASK2h)>>BN_BITS4;
- # 345 dl=(d&BN_MASK2l);
- and $8, $16,0xFFFFFFFF00000000
- dsrl $8, $8, 32
- # dli $10,0xFFFFFFFF # Is this needed?
- # and $10, $16, $10
- dsll $10, $16, 32
- dsrl $10, $10, 32
- dli $6,0xFFFFFFFF00000000
-$84:
- # 346 for (;;)
- # 347 {
- # 348 if ((h>>BN_BITS4) == dh)
- dsrl $15, $9, 32
- bne $8, $15, $85
- # 349 q=BN_MASK2l;
- dli $5, 0xFFFFFFFF
- b $86
-$85:
- # 350 else
- # 351 q=h/dh;
- ddivu $5, $9, $8
-$86:
- # 352
- # 353 for (;;)
- # 354 {
- # 355 t=(h-q*dh);
- dmul $4, $5, $8
- dsubu $2, $9, $4
- move $3, $2
- # 356 if ((t&BN_MASK2h) ||
- # 357 ((dl*q) <= (
- # 358 (t<<BN_BITS4)+
- # 359 ((l&BN_MASK2h)>>BN_BITS4))))
- and $25, $2, $6
- bne $25, $0, $87
- dmul $24, $10, $5
- dsll $14, $3, 32
- and $15, $12, $6
- dsrl $25, $15, 32
- daddu $15, $14, $25
- bgtu $24, $15, $88
-$87:
- # 360 break;
- dmul $3, $10, $5
- b $89
-$88:
- # 361 q--;
- daddu $5, $5, -1
- # 362 }
- b $86
-$89:
- # 363 th=q*dh;
- # 364 tl=q*dl;
- # 365 t=(tl>>BN_BITS4);
- # 366 tl=(tl<<BN_BITS4)&BN_MASK2h;
- dsll $14, $3, 32
- and $2, $14, $6
- move $11, $2
- # 367 th+=t;
- dsrl $25, $3, 32
- daddu $7, $4, $25
- # 368
- # 369 if (l < tl) th++;
- bgeu $12, $2, $90
- daddu $7, $7, 1
-$90:
- # 370 l-=tl;
- dsubu $12, $12, $11
- # 371 if (h < th)
- bgeu $9, $7, $91
- # 372 {
- # 373 h+=d;
- daddu $9, $9, $16
- # 374 q--;
- daddu $5, $5, -1
- # 375 }
-$91:
- # 376 h-=th;
- dsubu $9, $9, $7
- # 377
- # 378 if (--count == 0) break;
- addu $13, $13, -1
- beq $13, 0, $92
- # 379
- # 380 ret=q<<BN_BITS4;
- dsll $31, $5, 32
- # 381 h=((h<<BN_BITS4)|(l>>BN_BITS4))&BN_MASK2;
- dsll $24, $9, 32
- dsrl $15, $12, 32
- or $9, $24, $15
- # 382 l=(l&BN_MASK2l)<<BN_BITS4;
- and $12, $12, 0xFFFFFFFF
- dsll $12, $12, 32
- # 383 }
- b $84
-$92:
- # 384 ret|=q;
- or $31, $31, $5
- # 385 return(ret);
- move $2, $31
-$93:
- ld $16, 48($sp)
- ld $31, 56($sp)
- daddu $sp, 64
- j $31
- .end bn_div64
-#endif