aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@redhat.com>2001-04-25 16:14:24 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2001-04-25 17:14:24 +0100
commit73de376fa0e930f494feeda1603dc34eaeef6067 (patch)
treefc23cad59ba5c632088ab802f8062abbeaab8bbd
parent889a80aa959ca3edffb1d39f9472787058f89989 (diff)
downloadgcc-73de376fa0e930f494feeda1603dc34eaeef6067.zip
gcc-73de376fa0e930f494feeda1603dc34eaeef6067.tar.gz
gcc-73de376fa0e930f494feeda1603dc34eaeef6067.tar.bz2
emit-rtl.c (constant_subword): Also do sign extension in BITS_PER_WORD == 16 case.
* emit-rtl.c (constant_subword): Also do sign extension in BITS_PER_WORD == 16 case. From-SVN: r41545
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/emit-rtl.c4
2 files changed, 7 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 87bac60..c6c57ef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Wed Apr 25 17:09:50 2001 J"orn Rennecke <amylaar@redhat.com>
+
+ * emit-rtl.c (constant_subword): Also do sign extension in
+ BITS_PER_WORD == 16 case.
+
2001-04-25 Jason Merrill <jason_merrill@redhat.com>
* loop.c (try_swap_copy_prop): Go back to checking insn.
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 480ff15..6fe21ae 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -1369,7 +1369,7 @@ constant_subword (op, offset, mode)
val = k[offset >> 1];
if ((offset & 1) == ! WORDS_BIG_ENDIAN)
val >>= 16;
- val &= 0xffff;
+ val = ((val & 0xffff) ^ 0x8000) - 0x8000;
return GEN_INT (val);
}
else
@@ -1448,7 +1448,7 @@ constant_subword (op, offset, mode)
{
if ((offset & 1) == ! WORDS_BIG_ENDIAN)
val >>= 16;
- val &= 0xffff;
+ val = ((val & 0xffff) ^ 0x8000) - 0x8000;
}
return GEN_INT (val);