Commit 9cb00eb1 by Daniel Cederman Committed by Daniel Hellstrom

Do not use floating point registers when compiling with -msoft-float for SPARC

2015-09-28  Daniel Cederman  <cederman@gaisler.com>

Do not use floating point registers when compiling with -msoft-float for SPARC

__builtin_apply* and __builtin_return accesses the floating point registers on
SPARC even when compiling with -msoft-float.

gcc/
	* config/sparc/sparc.c (sparc_function_value_regno_p): Do not return
	true on %f0 for a target without FPU.
	* config/sparc/sparc.md (untyped_call): Do not save %f0 for a target
	without FPU.
	(untyped_return): Do not load %f0 for a target without FPU.

From-SVN: r228183
parent 65629a24
2015-09-28 Daniel Cederman <cederman@gaisler.com>
* config/sparc/sparc.c (sparc_function_value_regno_p): Do not return
true on %f0 for a target without FPU.
* config/sparc/sparc.md (untyped_call): Do not save %f0 for a target
without FPU.
(untyped_return): Do not load %f0 for a target without FPU.
2015-09-28 Andrew Pinski <apinski@cavium.com> 2015-09-28 Andrew Pinski <apinski@cavium.com>
* config/aarch64/aarch64.md (prefetch): * config/aarch64/aarch64.md (prefetch):
...@@ -7395,7 +7395,7 @@ sparc_libcall_value (machine_mode mode, ...@@ -7395,7 +7395,7 @@ sparc_libcall_value (machine_mode mode,
static bool static bool
sparc_function_value_regno_p (const unsigned int regno) sparc_function_value_regno_p (const unsigned int regno)
{ {
return (regno == 8 || regno == 32); return (regno == 8 || (TARGET_FPU && regno == 32));
} }
/* Do what is necessary for `va_start'. We look at the current function /* Do what is necessary for `va_start'. We look at the current function
......
...@@ -6398,7 +6398,6 @@ ...@@ -6398,7 +6398,6 @@
"" ""
{ {
rtx valreg1 = gen_rtx_REG (DImode, 8); rtx valreg1 = gen_rtx_REG (DImode, 8);
rtx valreg2 = gen_rtx_REG (TARGET_ARCH64 ? TFmode : DFmode, 32);
rtx result = operands[1]; rtx result = operands[1];
/* Pass constm1 to indicate that it may expect a structure value, but /* Pass constm1 to indicate that it may expect a structure value, but
...@@ -6407,8 +6406,12 @@ ...@@ -6407,8 +6406,12 @@
/* Save the function value registers. */ /* Save the function value registers. */
emit_move_insn (adjust_address (result, DImode, 0), valreg1); emit_move_insn (adjust_address (result, DImode, 0), valreg1);
emit_move_insn (adjust_address (result, TARGET_ARCH64 ? TFmode : DFmode, 8), if (TARGET_FPU)
valreg2); {
rtx valreg2 = gen_rtx_REG (TARGET_ARCH64 ? TFmode : DFmode, 32);
emit_move_insn (adjust_address (result, TARGET_ARCH64 ? TFmode : DFmode, 8),
valreg2);
}
/* The optimizer does not know that the call sets the function value /* The optimizer does not know that the call sets the function value
registers we stored in the result block. We avoid problems by registers we stored in the result block. We avoid problems by
...@@ -6620,7 +6623,6 @@ ...@@ -6620,7 +6623,6 @@
"" ""
{ {
rtx valreg1 = gen_rtx_REG (DImode, 24); rtx valreg1 = gen_rtx_REG (DImode, 24);
rtx valreg2 = gen_rtx_REG (TARGET_ARCH64 ? TFmode : DFmode, 32);
rtx result = operands[0]; rtx result = operands[0];
if (! TARGET_ARCH64) if (! TARGET_ARCH64)
...@@ -6637,14 +6639,18 @@ ...@@ -6637,14 +6639,18 @@
emit_insn (gen_update_return (rtnreg, value)); emit_insn (gen_update_return (rtnreg, value));
} }
/* Reload the function value registers. */ /* Reload the function value registers.
Put USE insns before the return. */
emit_move_insn (valreg1, adjust_address (result, DImode, 0)); emit_move_insn (valreg1, adjust_address (result, DImode, 0));
emit_move_insn (valreg2,
adjust_address (result, TARGET_ARCH64 ? TFmode : DFmode, 8));
/* Put USE insns before the return. */
emit_use (valreg1); emit_use (valreg1);
emit_use (valreg2);
if (TARGET_FPU)
{
rtx valreg2 = gen_rtx_REG (TARGET_ARCH64 ? TFmode : DFmode, 32);
emit_move_insn (valreg2,
adjust_address (result, TARGET_ARCH64 ? TFmode : DFmode, 8));
emit_use (valreg2);
}
/* Construct the return. */ /* Construct the return. */
expand_naked_return (); expand_naked_return ();
......
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