diff --git a/Configure b/Configure index 7d6276205e..c648695c65 100755 --- a/Configure +++ b/Configure @@ -89,9 +89,7 @@ my $x86_elf_asm="asm/bn86-elf.o asm/co86-elf.o:asm/dx86-elf.o asm/yx86-elf.o:asm my $x86_out_asm="asm/bn86-out.o asm/co86-out.o:asm/dx86-out.o asm/yx86-out.o:asm/bx86-out.o:asm/mx86-out.o:asm/sx86-out.o:asm/cx86-out.o:asm/rx86-out.o:asm/rm86-out.o:asm/r586-out.o"; my $x86_bsdi_asm="asm/bn86bsdi.o asm/co86bsdi.o:asm/dx86bsdi.o asm/yx86bsdi.o:asm/bx86bsdi.o:asm/mx86bsdi.o:asm/sx86bsdi.o:asm/cx86bsdi.o:asm/rx86bsdi.o:asm/rm86bsdi.o:asm/r586bsdi.o"; -# There seems to be some kind of fault in asm/mips3.s -#my $mips3_irix_asm="asm/mips3.o::::::::"; -my $mips3_irix_asm="::::::::"; +my $mips3_irix_asm="asm/mips3.o::::::::"; # There seems to be boundary faults in asm/alpha.s. #my $alpha_asm="asm/alpha.o::::::::"; my $alpha_asm="::::::::"; diff --git a/crypto/bn/asm/mips3.s b/crypto/bn/asm/mips3.s index 2df4dcd4b0..45786c00a5 100644 --- a/crypto/bn/asm/mips3.s +++ b/crypto/bn/asm/mips3.s @@ -586,13 +586,13 @@ LEAF(bn_div_3_words) ld a0,(a3) move ta2,a1 ld a1,-8(a3) - move ta3,ra - move v1,zero + bne a0,a2,.L_bn_div_3_words_proceed li v0,-1 - beq a0,a2,.L_bn_div_3_words_skip_div + jr ra +.L_bn_div_3_words_proceed: + move ta3,ra bal bn_div_words move ra,ta3 -.L_bn_div_3_words_skip_div: dmultu ta2,v0 ld t2,-16(a3) move ta0,zero diff --git a/crypto/bn/bn_div.c b/crypto/bn/bn_div.c index 891b602631..c328b5b411 100644 --- a/crypto/bn/bn_div.c +++ b/crypto/bn/bn_div.c @@ -238,6 +238,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor, { BN_ULONG q,l0; #if defined(BN_DIV3W) && !defined(NO_ASM) + BN_ULONG bn_div_3_words(BN_ULONG*,BN_ULONG,BN_ULONG); q=bn_div_3_words(wnump,d1,d0); #else BN_ULONG n0,n1,rem=0;