diff options
author | Jakub Jelinek <jakub@redhat.com> | 2000-11-17 21:45:23 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2000-11-17 21:45:23 +0000 |
commit | 823ef305f6ab5cf6d54dd06a40ecdee4154a2bd6 (patch) | |
tree | ca55700cb1c5661407c485597382fa44f68e797f | |
parent | af5cd0332824673cb884002331bbbb154a51c537 (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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/expmed.c | 11 |
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)); |