diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2003-09-26 13:28:45 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2003-09-26 13:28:45 +0000 |
commit | 9f5e2e11084caae56b3b00feffd6a462b385afeb (patch) | |
tree | d45d8ab5a2f696eaff872f20f152484b4d878038 | |
parent | 5581fc9110377e8a08394f985a17c3e0cb31227a (diff) | |
download | gcc-9f5e2e11084caae56b3b00feffd6a462b385afeb.zip gcc-9f5e2e11084caae56b3b00feffd6a462b385afeb.tar.gz gcc-9f5e2e11084caae56b3b00feffd6a462b385afeb.tar.bz2 |
expmed.c (store_bit_field): Don't search for an integer mode unless we need the result.
* expmed.c (store_bit_field): Don't search for an integer mode
unless we need the result.
From-SVN: r71819
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expmed.c | 9 |
2 files changed, 9 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 534e99b..5929dca 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2003-09-26 Richard Sandiford <rsandifo@redhat.com> + * expmed.c (store_bit_field): Don't search for an integer mode + unless we need the result. + +2003-09-26 Richard Sandiford <rsandifo@redhat.com> + * expr.c (emit_move_insn_1): If there is no move pattern for the original mode, try using a pattern for the corresponding integer mode. diff --git a/gcc/expmed.c b/gcc/expmed.c index 6acc895..d93be93 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -461,7 +461,9 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, VOIDmode, because that is what store_field uses to indicate that this is a bit field, but passing VOIDmode to operand_subword_force will result in an abort. */ - fieldmode = smallest_mode_for_size (nwords * BITS_PER_WORD, MODE_INT); + fieldmode = GET_MODE (value); + if (fieldmode == VOIDmode) + fieldmode = smallest_mode_for_size (nwords * BITS_PER_WORD, MODE_INT); for (i = 0; i < nwords; i++) { @@ -477,10 +479,7 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, store_bit_field (op0, MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD), bitnum + bit_offset, word_mode, - operand_subword_force (value, wordnum, - (GET_MODE (value) == VOIDmode - ? fieldmode - : GET_MODE (value))), + operand_subword_force (value, wordnum, fieldmode), total_size); } return value; |