pa.c (function_arg): Pass floating arguments in both general and floating registers in indirect...

* pa.c (function_arg): Pass floating arguments in both general and
	floating registers in indirect (dynamic) calls when generating code
	for the 32 bit ABI and the HP assembler.

From-SVN: r45775
This commit is contained in:
John David Anglin 2001-09-24 16:16:07 +00:00 committed by John David Anglin
parent 250d568873
commit b848dc65c4
2 changed files with 29 additions and 15 deletions

View File

@ -1,3 +1,9 @@
2001-09-24 John David Anglin <dave@hiauly1.hia.nrc.ca>
* pa.c (function_arg): Pass floating arguments in both general and
floating registers in indirect (dynamic) calls when generating code
for the 32 bit ABI and the HP assembler.
2001-09-24 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* doc/install.texi: Markup fixes.

View File

@ -7145,22 +7145,30 @@ function_arg (cum, mode, type, named, incoming)
gen_rtx_REG (DImode, gpr_reg_base),
GEN_INT (8))));
}
/* Determine if the register needs to be passed in both general and
/* Determine if the argument needs to be passed in both general and
floating point registers. */
if ((TARGET_PORTABLE_RUNTIME || TARGET_64BIT || TARGET_ELF32)
/* If we are doing soft-float with portable runtime, then there
is no need to worry about FP regs. */
&& ! TARGET_SOFT_FLOAT
/* The parameter must be some kind of float, else we can just
pass it in integer registers. */
&& FLOAT_MODE_P (mode)
/* The target function must not have a prototype. */
&& cum->nargs_prototype <= 0
/* libcalls do not need to pass items in both FP and general
registers. */
&& type != NULL_TREE
/* All this hair applies to outgoing args only. */
&& !incoming)
if (((TARGET_PORTABLE_RUNTIME || TARGET_64BIT || TARGET_ELF32)
/* If we are doing soft-float with portable runtime, then there
is no need to worry about FP regs. */
&& ! TARGET_SOFT_FLOAT
/* The parameter must be some kind of float, else we can just
pass it in integer registers. */
&& FLOAT_MODE_P (mode)
/* The target function must not have a prototype. */
&& cum->nargs_prototype <= 0
/* libcalls do not need to pass items in both FP and general
registers. */
&& type != NULL_TREE
/* All this hair applies to outgoing args only. */
&& ! incoming)
/* Also pass outgoing floating arguments in both registers in indirect
calls with the 32 bit ABI and the HP assembler since there is no
way to the specify argument locations in static functions. */
|| (! TARGET_64BIT
&& ! TARGET_GAS
&& ! incoming
&& cum->indirect
&& FLOAT_MODE_P (mode)))
{
retval
= gen_rtx_PARALLEL