summaryrefslogtreecommitdiff
path: root/gcc/expmed.c
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@redhat.com>2003-09-26 13:28:45 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2003-09-26 13:28:45 +0000
commit9f5e2e11084caae56b3b00feffd6a462b385afeb (patch)
treed45d8ab5a2f696eaff872f20f152484b4d878038 /gcc/expmed.c
parent5581fc9110377e8a08394f985a17c3e0cb31227a (diff)
downloadgcc-9f5e2e11084caae56b3b00feffd6a462b385afeb.tar.gz
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
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r--gcc/expmed.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 6acc8956e26..d93be934be3 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;