sparc.c (function_arg_record_value_1): Skip fields with zero length.
* config/sparc/sparc.c (function_arg_record_value_1): Skip fields with zero length. (function_arg_record_value_2): Likewise. (function_arg_record_value_3): Use smallest_mode_for_size instead of mode_for_size. (function_arg_union_value): Return naked register for unions with zero length. From-SVN: r90180
This commit is contained in:
parent
45261626da
commit
bb05e3410c
|
@ -1,3 +1,13 @@
|
||||||
|
2004-11-06 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||||
|
|
||||||
|
* config/sparc/sparc.c (function_arg_record_value_1): Skip
|
||||||
|
fields with zero length.
|
||||||
|
(function_arg_record_value_2): Likewise.
|
||||||
|
(function_arg_record_value_3): Use smallest_mode_for_size
|
||||||
|
instead of mode_for_size.
|
||||||
|
(function_arg_union_value): Return naked register for unions
|
||||||
|
with zero length.
|
||||||
|
|
||||||
2004-11-06 Eric Botcazou <ebotcazou@libertysurf.fr>
|
2004-11-06 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||||
|
|
||||||
* config/sparc/sparc.c (scan_record_type): Handle vector types.
|
* config/sparc/sparc.c (scan_record_type): Handle vector types.
|
||||||
|
|
|
@ -5262,9 +5262,14 @@ function_arg_record_value_1 (tree type, HOST_WIDE_INT startbitpos,
|
||||||
{
|
{
|
||||||
HOST_WIDE_INT bitpos = startbitpos;
|
HOST_WIDE_INT bitpos = startbitpos;
|
||||||
|
|
||||||
if (DECL_SIZE (field) != 0
|
if (DECL_SIZE (field) != 0)
|
||||||
&& host_integerp (bit_position (field), 1))
|
{
|
||||||
bitpos += int_bit_position (field);
|
if (integer_zerop (DECL_SIZE (field)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (host_integerp (bit_position (field), 1))
|
||||||
|
bitpos += int_bit_position (field);
|
||||||
|
}
|
||||||
|
|
||||||
/* ??? FIXME: else assume zero offset. */
|
/* ??? FIXME: else assume zero offset. */
|
||||||
|
|
||||||
|
@ -5355,8 +5360,8 @@ function_arg_record_value_3 (HOST_WIDE_INT bitpos,
|
||||||
at the moment but may wish to revisit. */
|
at the moment but may wish to revisit. */
|
||||||
|
|
||||||
if (intoffset % BITS_PER_WORD != 0)
|
if (intoffset % BITS_PER_WORD != 0)
|
||||||
mode = mode_for_size (BITS_PER_WORD - intoffset % BITS_PER_WORD,
|
mode = smallest_mode_for_size (BITS_PER_WORD - intoffset % BITS_PER_WORD,
|
||||||
MODE_INT, 0);
|
MODE_INT);
|
||||||
else
|
else
|
||||||
mode = word_mode;
|
mode = word_mode;
|
||||||
|
|
||||||
|
@ -5405,9 +5410,14 @@ function_arg_record_value_2 (tree type, HOST_WIDE_INT startbitpos,
|
||||||
{
|
{
|
||||||
HOST_WIDE_INT bitpos = startbitpos;
|
HOST_WIDE_INT bitpos = startbitpos;
|
||||||
|
|
||||||
if (DECL_SIZE (field) != 0
|
if (DECL_SIZE (field) != 0)
|
||||||
&& host_integerp (bit_position (field), 1))
|
{
|
||||||
bitpos += int_bit_position (field);
|
if (integer_zerop (DECL_SIZE (field)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (host_integerp (bit_position (field), 1))
|
||||||
|
bitpos += int_bit_position (field);
|
||||||
|
}
|
||||||
|
|
||||||
/* ??? FIXME: else assume zero offset. */
|
/* ??? FIXME: else assume zero offset. */
|
||||||
|
|
||||||
|
@ -5588,6 +5598,10 @@ function_arg_union_value (int size, enum machine_mode mode, int regno)
|
||||||
int nwords = ROUND_ADVANCE (size), i;
|
int nwords = ROUND_ADVANCE (size), i;
|
||||||
rtx regs;
|
rtx regs;
|
||||||
|
|
||||||
|
/* See comment in previous function for empty structures. */
|
||||||
|
if (nwords == 0)
|
||||||
|
return gen_rtx_REG (mode, regno);
|
||||||
|
|
||||||
regs = gen_rtx_PARALLEL (mode, rtvec_alloc (nwords));
|
regs = gen_rtx_PARALLEL (mode, rtvec_alloc (nwords));
|
||||||
|
|
||||||
for (i = 0; i < nwords; i++)
|
for (i = 0; i < nwords; i++)
|
||||||
|
|
Loading…
Reference in New Issue