Commit b5870bee by Aldy Hernandez

rs6000.c (rs6000_spe_function_arg): Multi-reg arguments go on the stack.

	* config/rs6000/rs6000.c (rs6000_spe_function_arg): Multi-reg
	arguments go on the stack.  Do not put complex doubles in odd/even
	pairs.

From-SVN: r94617
parent cf676baa
...@@ -5170,11 +5170,14 @@ rs6000_spe_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, ...@@ -5170,11 +5170,14 @@ rs6000_spe_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
are passed and returned in a pair of GPRs for ABI compatibility. */ are passed and returned in a pair of GPRs for ABI compatibility. */
if (TARGET_E500_DOUBLE && (mode == DFmode || mode == DCmode)) if (TARGET_E500_DOUBLE && (mode == DFmode || mode == DCmode))
{ {
int n_words = rs6000_arg_size (mode, type);
/* Doubles go in an odd/even register pair (r5/r6, etc). */ /* Doubles go in an odd/even register pair (r5/r6, etc). */
gregno += (1 - gregno) & 1; if (mode == DFmode)
gregno += (1 - gregno) & 1;
/* We do not split between registers and stack. */ /* Multi-reg args are not split between registers and stack. */
if (gregno + 1 > GP_ARG_MAX_REG) if (gregno + n_words - 1 > GP_ARG_MAX_REG)
return NULL_RTX; return NULL_RTX;
return spe_build_register_parallel (mode, gregno); return spe_build_register_parallel (mode, gregno);
......
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