diff options
| author | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-10-30 17:06:40 +0000 |
|---|---|---|
| committer | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-10-30 17:06:40 +0000 |
| commit | ca2399d9e4c7a5ee317197fbbbcfd591e0d543af (patch) | |
| tree | 8ca30322e05d0a7c508e3b7b7d3e7c539c7ced1f | |
| parent | fbd34835da2ebee78f98d97564da80a26094b0a6 (diff) | |
| download | ppe42-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/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/mmix/mmix.c | 20 |
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) { |

