expmed.c (extract_bit_field_1): Also use a temporary and convert_extracted_bit_field when...
* expmed.c (extract_bit_field_1): Also use a temporary and convert_extracted_bit_field when the conversion from ext_mode to the target mode requires explicit truncation. testsuite/ * gcc.c-torture/execute/20081117-1.c: New test. From-SVN: r141960
This commit is contained in:
parent
da8f5862ce
commit
a990abffbf
|
@ -1,3 +1,9 @@
|
|||
2008-11-17 Adam Nemet <anemet@caviumnetworks.com>
|
||||
|
||||
* expmed.c (extract_bit_field_1): Also use a temporary and
|
||||
convert_extracted_bit_field when the conversion from ext_mode to
|
||||
the target mode requires explicit truncation.
|
||||
|
||||
2008-11-17 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/mips/mips.h (REG_ALLOC_ORDER): Put accumulators first.
|
||||
|
|
|
@ -1533,7 +1533,13 @@ extract_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
|
|||
|
||||
if (GET_MODE (xtarget) != ext_mode)
|
||||
{
|
||||
if (REG_P (xtarget))
|
||||
/* Don't use LHS paradoxical subreg if explicit truncation is needed
|
||||
between the mode of the extraction (word_mode) and the target
|
||||
mode. Instead, create a temporary and use convert_move to set
|
||||
the target. */
|
||||
if (REG_P (xtarget)
|
||||
&& TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (xtarget)),
|
||||
GET_MODE_BITSIZE (ext_mode)))
|
||||
{
|
||||
xtarget = gen_lowpart (ext_mode, xtarget);
|
||||
if (GET_MODE_SIZE (ext_mode)
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2008-11-17 Adam Nemet <anemet@caviumnetworks.com>
|
||||
|
||||
* gcc.c-torture/execute/20081117-1.c: New test.
|
||||
|
||||
2008-11-17 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* gcc.target/mips/dspr2-MULT.c: Just check for $ac1 and $ac2.
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
extern void abort (void);
|
||||
|
||||
struct s
|
||||
{
|
||||
unsigned long long a:16;
|
||||
unsigned long long b:32;
|
||||
unsigned long long c:16;
|
||||
};
|
||||
|
||||
__attribute__ ((noinline)) unsigned
|
||||
f (struct s s, unsigned i)
|
||||
{
|
||||
return s.b == i;
|
||||
}
|
||||
|
||||
struct s s = { 1, 0x87654321u, 2};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if (!f (s, 0x87654321u))
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue