From 7ac3f3c5fc37236b6cc913349890b30416c556d6 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Fri, 26 Sep 2003 13:28:45 +0000 Subject: * expmed.c (store_bit_field): Don't search for an integer mode unless we need the result. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71819 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/expmed.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'gcc/expmed.c') 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; -- cgit v1.2.1