From: Andrew Haley Date: Mon, 9 Jul 2001 15:25:34 +0000 (+0000) Subject: expmed.c (store_fixed_bit_field): Don't use a mode bigger than the mode of the memory... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=053a35af653f47c7fa2d8addc2a37714446e9948;p=gcc.git expmed.c (store_fixed_bit_field): Don't use a mode bigger than the mode of the memory location. 2001-07-03 Andrew Haley * expmed.c (store_fixed_bit_field): Don't use a mode bigger than the mode of the memory location. From-SVN: r43864 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e52cfcd62c..9481d68d69a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-07-03 Andrew Haley + + * expmed.c (store_fixed_bit_field): Don't use a mode bigger than + the mode of the memory location. + 2001-07-09 Bo Thorsen * config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Fix x86-64 vtable support. diff --git a/gcc/expmed.c b/gcc/expmed.c index 0a9b41cfdf4..d334f6dad1f 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -673,10 +673,15 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) { /* Get the proper mode to use for this field. We want a mode that includes the entire field. If such a mode would be larger than - a word, we won't be doing the extraction the normal way. */ + a word, we won't be doing the extraction the normal way. + We don't want a mode bigger than the destination. */ + mode = GET_MODE (op0); + if (GET_MODE_BITSIZE (mode) == 0 + || GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (word_mode)) + mode = word_mode; mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, - struct_align, word_mode, + struct_align, mode, GET_CODE (op0) == MEM && MEM_VOLATILE_P (op0)); if (mode == VOIDmode)