aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-01-01 12:55:19 +0000
committerJeff Law <law@gcc.gnu.org>1998-01-01 05:55:19 -0700
commitaa2ae67960340d03f93f8030a53fc6b7ae65dba5 (patch)
tree4c94ec9ba03228f14d55272aa91426ed89173a2e /gcc/emit-rtl.c
parent9f1ff8e8ea908339ff7b3941adb53948c63e2c69 (diff)
downloadgcc-aa2ae67960340d03f93f8030a53fc6b7ae65dba5.zip
gcc-aa2ae67960340d03f93f8030a53fc6b7ae65dba5.tar.gz
gcc-aa2ae67960340d03f93f8030a53fc6b7ae65dba5.tar.bz2
emit-rtl.c (operand_subword): Correctly handle extracting a word from a CONST_DOUBLE for 16bit targets with...
* emit-rtl.c (operand_subword): Correctly handle extracting a word from a CONST_DOUBLE for 16bit targets with !WORDS_BIG_ENDIAN. From-SVN: r17276
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r--gcc/emit-rtl.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index c93c3ea..7b114d6 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -1208,7 +1208,7 @@ operand_subword (op, i, validate_address, mode)
{
long value;
value = k[i >> 1];
- if ((i & 0x1) == 0)
+ if ((i & 0x1) == !WORDS_BIG_ENDIAN)
value >>= 16;
value &= 0xffff;
return GEN_INT ((HOST_WIDE_INT) value);
@@ -1265,6 +1265,13 @@ operand_subword (op, i, validate_address, mode)
REAL_VALUE_FROM_CONST_DOUBLE (rv, op);
REAL_VALUE_TO_TARGET_SINGLE (rv, l);
+
+ if (BITS_PER_WORD == 16)
+ {
+ if ((i & 0x1) == !WORDS_BIG_ENDIAN)
+ l >>= 16;
+ l &= 0xffff;
+ }
return GEN_INT ((HOST_WIDE_INT) l);
}
#else