Commit a5f00f07 by Jim Wilson

(store_fixed_bit_field): Move float mode to integral

mode conversion from near end of function to top of function.

From-SVN: r6657
parent d27c148b
......@@ -517,6 +517,17 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align)
int all_zero = 0;
int all_one = 0;
/* If VALUE is a floating-point mode, access it as an integer of the
corresponding size. This can occur on a machine with 64 bit registers
that uses SFmode for float. This can also occur for unaligned float
structure fields. */
if (GET_MODE_CLASS (GET_MODE (value)) == MODE_FLOAT)
{
if (GET_CODE (value) != REG)
value = copy_to_reg (value);
value = gen_rtx (SUBREG, word_mode, value, 0);
}
/* There is a case not handled here:
a structure with a known alignment of just a halfword
and a field split across two aligned halfwords within the structure.
......@@ -612,17 +623,6 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align)
if (GET_MODE (value) != mode)
{
/* If VALUE is a floating-point mode, access it as an integer
of the corresponding size, then convert it. This can occur on
a machine with 64 bit registers that uses SFmode for float. */
if (GET_MODE_CLASS (GET_MODE (value)) == MODE_FLOAT)
{
if (GET_CODE (value) != REG)
value = copy_to_reg (value);
value
= gen_rtx (SUBREG, word_mode, value, 0);
}
if ((GET_CODE (value) == REG || GET_CODE (value) == SUBREG)
&& GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (value)))
value = gen_lowpart (mode, value);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment