aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2000-11-17 21:45:23 +0000
committerJakub Jelinek <jakub@redhat.com>2000-11-17 21:45:23 +0000
commit823ef305f6ab5cf6d54dd06a40ecdee4154a2bd6 (patch)
treeca55700cb1c5661407c485597382fa44f68e797f
parentaf5cd0332824673cb884002331bbbb154a51c537 (diff)
* expmed.c (store_bit_field): Set SUBREG_BYTE correctly on big
endian. (extract_bit_field): Likewise. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/subreg-byte-branch@37527 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/expmed.c11
2 files changed, 14 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4b3db3f28b8..dd832b26a43 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2000-11-17 Jakub Jelinek <jakub@redhat.com>
+
+ * expmed.c (store_bit_field): Set SUBREG_BYTE correctly on big
+ endian.
+ (extract_bit_field): Likewise.
+
2000-11-03 Jakub Jelinek <jakub@redhat.com>
* emit-rtl.c (operand_subword): Return const0_rtx if looking for a
diff --git a/gcc/expmed.c b/gcc/expmed.c
index b57de21710d..78359001c47 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -329,7 +329,8 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size)
}
if (GET_CODE (op0) == REG)
op0 = gen_rtx_SUBREG (fieldmode, op0,
- (offset * UNITS_PER_WORD));
+ (bitnum % BITS_PER_WORD) / BITS_PER_UNIT
+ + (offset * UNITS_PER_WORD));
else
op0 = change_address (op0, fieldmode,
plus_constant (XEXP (op0, 0), offset));
@@ -374,7 +375,9 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size)
}
emit_insn (GEN_FCN (icode)
- (gen_rtx_SUBREG (fieldmode, op0, (offset * UNITS_PER_WORD)),
+ (gen_rtx_SUBREG (fieldmode, op0,
+ (bitnum % BITS_PER_WORD) / BITS_PER_UNIT
+ + (offset * UNITS_PER_WORD)),
value));
return value;
@@ -1097,7 +1100,9 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
abort ();
}
if (GET_CODE (op0) == REG)
- op0 = gen_rtx_SUBREG (mode1, op0, (offset * UNITS_PER_WORD));
+ op0 = gen_rtx_SUBREG (mode1, op0,
+ (bitnum % BITS_PER_WORD) / BITS_PER_UNIT
+ + (offset * UNITS_PER_WORD));
else
op0 = change_address (op0, mode1,
plus_constant (XEXP (op0, 0), offset));