diff --git a/kernel/loongarch64/dnrm2.S b/kernel/loongarch64/dnrm2.S index 41db48bdf..ff937ae53 100644 --- a/kernel/loongarch64/dnrm2.S +++ b/kernel/loongarch64/dnrm2.S @@ -53,6 +53,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define s4 $f9 #define ALPHA $f4 #define max $f5 +#define INF $f6 PROLOGUE @@ -61,6 +62,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. LDINT INCX, 0(INCX) #endif + // Init INF + addi.d TEMP, $r0, 0x7FF + slli.d TEMP, TEMP, 52 + MTC INF, TEMP + MTC s1, $r0 bge $r0, N, .L999 slli.d INCX, INCX, BASE_SHIFT @@ -198,7 +204,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. CMPEQ $fcc0, s1, a1 fcvt.d.s ALPHA, ALPHA bcnez $fcc0, .L999 + fdiv.d ALPHA, ALPHA, s1 + CMPEQ $fcc0, INF, ALPHA + bcnez $fcc0, .L999 + MOV max, s1 MOV s1, a1 MOV s2, a1 diff --git a/kernel/mips64/dnrm2.S b/kernel/mips64/dnrm2.S index a095e0541..0ccc781e1 100644 --- a/kernel/mips64/dnrm2.S +++ b/kernel/mips64/dnrm2.S @@ -68,6 +68,7 @@ #define ALPHA $f16 #define max $f17 +#define INF $f18 PROLOGUE @@ -86,6 +87,11 @@ move XX, X NOP + //Init INF + lui TEMP, 0x7FF0 + dsll TEMP, TEMP, 32 + MTC1 TEMP, INF + LD a1, 0 * SIZE(X) daddiu N, N, -1 @@ -255,6 +261,9 @@ div.d ALPHA, ALPHA, s1 MOV max, s1 + CMPEQ $fcc0, ALPHA, INF + bc1t $fcc0, .L999 + MOV s1, a1 MOV s2, a1 MOV s3, a1