Commit c74fd3f1 by Eric Botcazou Committed by Eric Botcazou

re PR target/16430 (ICE when returning non-C aggregates larger than 16 bytes)

	PR target/16430
	* config/sparc/sparc.c (function_value): In 64-bit mode,
	return the aggregates larger than 16 bytes like unions.

From-SVN: r84289
parent 1d511ed5
2004-07-08 Eric Botcazou <ebotcazou@libertysurf.fr> 2004-07-08 Eric Botcazou <ebotcazou@libertysurf.fr>
PR target/16430
* config/sparc/sparc.c (function_value): In 64-bit mode,
return the aggregates larger than 16 bytes like unions.
2004-07-08 Eric Botcazou <ebotcazou@libertysurf.fr>
PR target/16199 PR target/16199
* config/sparc/sparc.c (sparc_emit_set_symbolic_const64): When * config/sparc/sparc.c (sparc_emit_set_symbolic_const64): When
'temp' is zero, generate new pseudos as needed and emit the 'temp' is zero, generate new pseudos as needed and emit the
......
...@@ -5750,6 +5750,18 @@ function_value (tree type, enum machine_mode mode, int incoming_p) ...@@ -5750,6 +5750,18 @@ function_value (tree type, enum machine_mode mode, int incoming_p)
abort (); /* shouldn't get here */ abort (); /* shouldn't get here */
mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0); mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0);
/* ??? We probably should have made the same ABI change in
3.4.0 as the one we made for unions. The latter was
required by the SCD though, while the former is not
specified, so we favored compatibility and efficiency.
Now we're stuck for aggregates larger than 16 bytes,
because OImode vanished in the meantime. Let's not
try to be unduly clever, and simply follow the ABI
for unions in that case. */
if (mode == BLKmode)
return function_arg_union_value (bytes, mode, regbase);
} }
else if (GET_MODE_CLASS (mode) == MODE_INT else if (GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_SIZE (mode) < UNITS_PER_WORD) && GET_MODE_SIZE (mode) < UNITS_PER_WORD)
......
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