aboutsummaryrefslogtreecommitdiff
path: root/gcc/real.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-05-16 17:51:44 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-05-16 17:51:44 -0400
commit60e611651584555d097ad3b2511ddea6d1fc6c20 (patch)
treee365ec8067665f6bde2e816f86addc7195ff7c74 /gcc/real.c
parent04ae9e4ccd10764edd8330e6fa5351e5997f1ead (diff)
downloadgcc-60e611651584555d097ad3b2511ddea6d1fc6c20.zip
gcc-60e611651584555d097ad3b2511ddea6d1fc6c20.tar.gz
gcc-60e611651584555d097ad3b2511ddea6d1fc6c20.tar.bz2
(ereal_from_int, ereal_to_int, etarsingle): Correct signed/unsigned discrepancies.
(ereal_from_int, ereal_to_int, etarsingle): Correct signed/unsigned discrepancies. (ereal_from_double): Avoid "right shift count too big" warning in previous change. From-SVN: r7313
Diffstat (limited to 'gcc/real.c')
-rw-r--r--gcc/real.c48
1 files changed, 21 insertions, 27 deletions
diff --git a/gcc/real.c b/gcc/real.c
index ba26cbd..b56577b 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -778,9 +778,9 @@ ereal_from_int (d, i, j)
high += 1;
}
eldexp (eone, HOST_BITS_PER_WIDE_INT, df);
- ultoe (&high, dg);
+ ultoe ((unsigned HOST_WIDE_INT *) &high, dg);
emul (dg, df, dg);
- ultoe (&low, df);
+ ultoe ((unsigned HOST_WIDE_INT *) &low, df);
eadd (df, dg, dg);
if (sign)
eneg (dg);
@@ -838,9 +838,9 @@ ereal_to_int (low, high, rr)
}
eldexp (eone, HOST_BITS_PER_WIDE_INT, df);
ediv (df, d, dg); /* dg = d / 2^32 is the high word */
- euifrac (dg, high, dh);
+ euifrac (dg, (unsigned HOST_WIDE_INT *) high, dh);
emul (df, dh, dg); /* fractional part is the low word */
- euifrac (dg, low, dh);
+ euifrac (dg, (unsigned HOST_WIDE_INT *)low, dh);
if (s)
{
/* complement and add 1 */
@@ -1040,7 +1040,7 @@ etarsingle (r)
REAL_VALUE_TYPE r;
{
unsigned EMUSHORT e[NE];
- unsigned long l;
+ long l;
GET_REAL (&r, e);
etoe24 (e, e);
@@ -5533,32 +5533,26 @@ ereal_from_double (d)
#if FLOAT_WORDS_BIG_ENDIAN
s[0] = (unsigned EMUSHORT) (d[0] >> 16);
s[1] = (unsigned EMUSHORT) d[0];
- if (HOST_BITS_PER_WIDE_INT >= 64)
- {
- /* In this case the entire target double is contained in the
- first array element. The second element of the input is ignored. */
- s[2] = (unsigned EMUSHORT) (d[0] >> 48);
- s[3] = (unsigned EMUSHORT) (d[0] >> 32);
- }
- else
- {
- s[2] = (unsigned EMUSHORT) (d[1] >> 16);
- s[3] = (unsigned EMUSHORT) d[1];
- }
+#if HOST_BITS_PER_WIDE_INT == 32
+ s[2] = (unsigned EMUSHORT) (d[1] >> 16);
+ s[3] = (unsigned EMUSHORT) d[1];
+#else
+ /* In this case the entire target double is contained in the
+ first array element. The second element of the input is ignored. */
+ s[2] = (unsigned EMUSHORT) (d[0] >> 48);
+ s[3] = (unsigned EMUSHORT) (d[0] >> 32);
+#endif
#else
/* Target float words are little-endian. */
s[0] = (unsigned EMUSHORT) d[0];
s[1] = (unsigned EMUSHORT) (d[0] >> 16);
- if (HOST_BITS_PER_WIDE_INT >= 64)
- {
- s[2] = (unsigned EMUSHORT) (d[0] >> 32);
- s[3] = (unsigned EMUSHORT) (d[0] >> 48);
- }
- else
- {
- s[2] = (unsigned EMUSHORT) d[1];
- s[3] = (unsigned EMUSHORT) (d[1] >> 16);
- }
+#if HOST_BITS_PER_WIDE_INT == 32
+ s[2] = (unsigned EMUSHORT) d[1];
+ s[3] = (unsigned EMUSHORT) (d[1] >> 16);
+#else
+ s[2] = (unsigned EMUSHORT) (d[0] >> 32);
+ s[3] = (unsigned EMUSHORT) (d[0] >> 48);
+#endif
#endif
/* Convert target double to E-type. */
e53toe (s, e);