+2018-03-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * config/rs6000/rs6000.c (abi_v4_pass_in_fpr): Add bool "named"
+ parameter. Use it for SFmode.
+ (rs6000_function_arg_advance_1): Adjust.
+ (rs6000_function_arg): Adjust.
+ (rs6000_gimplify_va_arg): Pass false for that new parameter.
+
2018-03-12 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/84169
registers. */
static bool
-abi_v4_pass_in_fpr (machine_mode mode)
+abi_v4_pass_in_fpr (machine_mode mode, bool named)
{
if (!TARGET_HARD_FLOAT)
return false;
- if (TARGET_SINGLE_FLOAT && mode == SFmode)
+ if (mode == DFmode)
return true;
- if (TARGET_DOUBLE_FLOAT && mode == DFmode)
+ if (mode == SFmode && named)
return true;
/* ABI_V4 passes complex IBM long double in 8 gprs.
Stupid, but we can't change the ABI now. */
}
else if (DEFAULT_ABI == ABI_V4)
{
- if (abi_v4_pass_in_fpr (mode))
+ if (abi_v4_pass_in_fpr (mode, named))
{
/* _Decimal128 must use an even/odd register pair. This assumes
that the register number is odd when fregno is odd. */
else if (abi == ABI_V4)
{
- if (abi_v4_pass_in_fpr (mode))
+ if (abi_v4_pass_in_fpr (mode, named))
{
/* _Decimal128 must use an even/odd register pair. This assumes
that the register number is odd when fregno is odd. */
align = 1;
machine_mode mode = TYPE_MODE (type);
- if (abi_v4_pass_in_fpr (mode))
+ if (abi_v4_pass_in_fpr (mode, false))
{
/* FP args go in FP registers, if present. */
reg = fpr;