Commit 09ebda1b by Stephane Carrez Committed by Stephane Carrez

sparc.c (epilogue_renumber): Do not replace %fp with %sp because it can cause…

sparc.c (epilogue_renumber): Do not replace %fp with %sp because it can cause the delayed instruction to...

	* config/sparc/sparc.c (epilogue_renumber): Do not replace %fp
	with %sp because it can cause the delayed instruction to load
	below the stack.

From-SVN: r47772
parent 595b6314
2001-12-07 Stephane Carrez <Stephane.Carrez@sun.com>
* config/sparc/sparc.c (epilogue_renumber): Do not replace %fp
with %sp because it can cause the delayed instruction to load
below the stack.
2001-12-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* alpha.c (alpha_expand_unaligned_store,
......
......@@ -5427,6 +5427,30 @@ epilogue_renumber (where, test)
case CONST_DOUBLE:
return 0;
/* Do not replace the frame pointer with the stack pointer because
it can cause the delayed instruction to load below the stack.
This occurs when instructions like:
(set (reg/i:SI 24 %i0)
(mem/f:SI (plus:SI (reg/f:SI 30 %fp)
(const_int -20 [0xffffffec])) 0))
are in the return delayed slot. */
case PLUS:
if (GET_CODE (XEXP (*where, 0)) == REG
&& REGNO (XEXP (*where, 0)) == FRAME_POINTER_REGNUM
&& (GET_CODE (XEXP (*where, 1)) != CONST_INT
|| INTVAL (XEXP (*where, 1)) < SPARC_STACK_BIAS))
return 1;
break;
case MEM:
if (SPARC_STACK_BIAS
&& GET_CODE (XEXP (*where, 0)) == REG
&& REGNO (XEXP (*where, 0)) == FRAME_POINTER_REGNUM)
return 1;
break;
default:
break;
}
......
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