real.c (emdnorm and etoasc): Disable round to even for c4x target to be compatible...
authorHerman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
Wed, 14 Oct 1998 00:07:47 +0000 (02:07 +0200)
committerJeff Law <law@gcc.gnu.org>
Wed, 14 Oct 1998 00:07:47 +0000 (18:07 -0600)
        * real.c (emdnorm and etoasc): Disable round to even for c4x target
        to be compatible with TI compiler.

From-SVN: r23072

gcc/ChangeLog
gcc/real.c

index 088d78280804997efbe2b8e780ff7c3a9b2babbd..d62c789b0ade1f237a0df19dbf2bf48564b99b3c 100644 (file)
@@ -11,6 +11,9 @@ Wed Oct 14 00:38:40 1998  Jeffrey A Law  (law@cygnus.com)
 
 1998-10-13 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
 
+       * real.c (emdnorm and etoasc): Disable round to even for c4x target
+       to be compatible with TI compiler.
+
        * Makefile.in (USER_H): Add va-c4x.h to definition.
 
 Tue Oct 13 23:03:37 1998  Richard Henderson  <rth@cygnus.com>
index 7e059131b3f4cbd68adb1c8c5bb0d9a67e6ff21d..7fac64d19a63553c74c4f86b2bab099f05b416e0 100644 (file)
@@ -79,7 +79,10 @@ netlib.att.com: netlib/cephes.   */
    `C4X' refers specifically to the floating point format used on
    Texas Instruments TMS320C3x and TMS320C4x digital signal
    processors.  This supports QFmode (32-bit float, double) and HFmode
-   (40-bit long double) where BITS_PER_BYTE is 32.
+   (40-bit long double) where BITS_PER_BYTE is 32. Unlike IEEE
+   floats, C4x floats are not rounded to be even. The C4x conversions
+   were contributed by m.hayes@elec.canterbury.ac.nz (Michael Hayes) and
+   Haj.Ten.Brugge@net.HCC.nl (Herman ten Brugge).
 
    If LONG_DOUBLE_TYPE_SIZE = 64 (the default, unless tm.h defines it)
    then `long double' and `double' are both implemented, but they
@@ -2594,6 +2597,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
   s[rw] &= ~rmsk;
   if ((r & rmbit) != 0)
     {
+#ifndef C4X
       if (r == rmbit)
        {
          if (lost == 0)
@@ -2607,6 +2611,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
                goto mddone;
            }
        }
+#endif
       eaddm (rbit, s);
     }
  mddone:
@@ -4932,8 +4937,10 @@ etoasc (x, string, ndigs)
          emovo (y, t);
          if (ecmp (t, ezero) != 0)
            goto roun;          /* round to nearest */
+#ifndef C4X
          if ((*(s - 1) & 1) == 0)
            goto doexp;         /* round to even */
+#endif
        }
       /* Round up and propagate carry-outs */
     roun: