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
This commit is contained in:
Tristan Gingold 2012-03-12 15:52:51 +00:00 committed by Tristan Gingold
parent c4bc5c255a
commit 472b8fdc56
2 changed files with 22 additions and 16 deletions

View File

@ -1,3 +1,8 @@
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.

View File

@ -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. */