summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-30 17:06:40 +0000
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-30 17:06:40 +0000
commitca2399d9e4c7a5ee317197fbbbcfd591e0d543af (patch)
tree8ca30322e05d0a7c508e3b7b7d3e7c539c7ced1f
parentfbd34835da2ebee78f98d97564da80a26094b0a6 (diff)
downloadppe42-gcc-ca2399d9e4c7a5ee317197fbbbcfd591e0d543af.tar.gz
ppe42-gcc-ca2399d9e4c7a5ee317197fbbbcfd591e0d543af.zip
* config/mmix/mmix.c (mmix_intval): Correct handling of DFmode
constants for hosts with long != 32 bits. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106027 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/mmix/mmix.c20
2 files changed, 12 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9bafabe0cf..4eb8a407473 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-10-30 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * config/mmix/mmix.c (mmix_intval): Correct handling of DFmode
+ constants for hosts with long != 32 bits.
+
2005-10-28 Andreas Krebbel <krebbel1@de.ibm.com>
PR middle-end/24093
diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c
index 1b5acc43306..fc2a5c82d68 100644
--- a/gcc/config/mmix/mmix.c
+++ b/gcc/config/mmix/mmix.c
@@ -2705,19 +2705,13 @@ mmix_intval (rtx x)
REAL_VALUE_TO_TARGET_DOUBLE (value, bits);
- if (sizeof (long) < sizeof (HOST_WIDEST_INT))
- {
- retval = (unsigned long) bits[1] / 2;
- retval *= 2;
- retval |= (unsigned long) bits[1] & 1;
- retval
- |= (unsigned HOST_WIDEST_INT) bits[0]
- << (sizeof (bits[0]) * 8);
- }
- else
- retval = (unsigned long) bits[1];
-
- return retval;
+ /* The double cast is necessary to avoid getting the long
+ sign-extended to unsigned long long(!) when they're of
+ different size (usually 32-bit hosts). */
+ return
+ ((unsigned HOST_WIDEST_INT) (unsigned long) bits[0]
+ << (unsigned HOST_WIDEST_INT) 32U)
+ | (unsigned HOST_WIDEST_INT) (unsigned long) bits[1];
}
else if (GET_MODE (x) == SFmode)
{
OpenPOWER on IntegriCloud