linux-mips
[Top] [All Lists]

math emulator patch

To: linux-mips@oss.sgi.com
Subject: math emulator patch
From: Mark Salter <msalter@redhat.com>
Date: Thu, 29 Nov 2001 20:38:24 -0500
Sender: owner-linux-mips@oss.sgi.com
The following patch fixes the emulation of cvt.w.s and cvt.w.d for
values of -2147483648.

--Mark


Index: sp_tint.c
===================================================================
RCS file: /cvs/linux/arch/mips/math-emu/sp_tint.c,v
retrieving revision 1.4
diff -u -p -5 -c -r1.4 sp_tint.c
cvs server: conflicting specifications of output style
*** sp_tint.c   2001/10/09 23:56:19     1.4
--- sp_tint.c   2001/11/29 19:14:58
*************** int ieee754sp_tint(ieee754sp x)
*** 48,57 ****
--- 48,60 ----
        case IEEE754_CLASS_DNORM:
        case IEEE754_CLASS_NORM:
                break;
        }
        if (xe >= 31) {
+               /* look for valid corner case */
+               if (xe == 31 && xs && xm == SP_HIDDEN_BIT)
+                       return -2147483648;
                /* Set invalid. We will only use overflow for floating
                   point overflow */
                SETCX(IEEE754_INVALID_OPERATION);
                return ieee754si_xcpt(ieee754si_indef(), "sp_tint", x);
        }
Index: dp_tint.c
===================================================================
RCS file: /cvs/linux/arch/mips/math-emu/dp_tint.c,v
retrieving revision 1.4
diff -u -p -5 -c -r1.4 dp_tint.c
cvs server: conflicting specifications of output style
*** dp_tint.c   2001/10/09 23:56:18     1.4
--- dp_tint.c   2001/11/29 19:18:02
*************** int ieee754dp_tint(ieee754dp x)
*** 48,57 ****
--- 48,60 ----
        case IEEE754_CLASS_DNORM:
        case IEEE754_CLASS_NORM:
                break;
        }
        if (xe >= 31) {
+               /* look for valid corner case */
+               if (xe == 31 && xs && xm == DP_HIDDEN_BIT)
+                       return -2147483648;
                /* Set invalid. We will only use overflow for floating
                   point overflow */
                SETCX(IEEE754_INVALID_OPERATION);
                return ieee754si_xcpt(ieee754si_indef(), "dp_tint", x);
        }

<Prev in Thread] Current Thread [Next in Thread>