Commit 472b8fdc by Tristan Gingold Committed by Tristan Gingold

ia64.c (ia64_function_arg_1): Move code around.

2012-03-12  Tristan Gingold  <gingold@adacore.com>

	* config/ia64/ia64.c (ia64_function_arg_1): Move code around.
	(ia64_function_arg_advance): Ditto.

From-SVN: r185246
parent c4bc5c25
2012-03-12 Tristan Gingold <gingold@adacore.com>
* config/ia64/ia64.c (ia64_function_arg_1): Move code around.
(ia64_function_arg_advance): Ditto.
2012-03-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config.gcc (mips*-*-openbsd*): Remove.
......
......@@ -4491,6 +4491,15 @@ ia64_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
if (cum->words + offset >= MAX_ARGUMENT_SLOTS)
return 0;
/* On OpenVMS argument is either in Rn or Fn. */
if (TARGET_ABI_OPEN_VMS)
{
if (FLOAT_MODE_P (mode))
return gen_rtx_REG (mode, FR_ARG_FIRST + cum->words);
else
return gen_rtx_REG (mode, basereg + cum->words);
}
/* Check for and handle homogeneous FP aggregates. */
if (type)
hfa_mode = hfa_element_mode (type, 0);
......@@ -4577,15 +4586,6 @@ ia64_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
}
/* On OpenVMS variable argument is either in Rn or Fn. */
else if (TARGET_ABI_OPEN_VMS && named == 0)
{
if (FLOAT_MODE_P (mode))
return gen_rtx_REG (mode, FR_ARG_FIRST + cum->words);
else
return gen_rtx_REG (mode, basereg + cum->words);
}
/* Integral and aggregates go in general registers. If we have run out of
FR registers, then FP values must also go in general registers. This can
happen when we have a SFmode HFA. */
......@@ -4736,6 +4736,14 @@ ia64_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
cum->atypes[cum->words] = ia64_arg_type (mode);
cum->words += words + offset;
/* On OpenVMS argument is either in Rn or Fn. */
if (TARGET_ABI_OPEN_VMS)
{
cum->int_regs = cum->words;
cum->fp_regs = cum->words;
return;
}
/* Check for and handle homogeneous FP aggregates. */
if (type)
hfa_mode = hfa_element_mode (type, 0);
......@@ -4776,13 +4784,6 @@ ia64_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
cum->fp_regs = fp_regs;
}
/* On OpenVMS variable argument is either in Rn or Fn. */
else if (TARGET_ABI_OPEN_VMS && named == 0)
{
cum->int_regs = cum->words;
cum->fp_regs = cum->words;
}
/* Integral and aggregates go in general registers. So do TFmode FP values.
If we have run out of FR registers, then other FP values must also go in
general registers. This can happen when we have a SFmode HFA. */
......
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