Commit 7c2b017c by Andrew MacLeod Committed by Andrew Macleod

stmt.c (expand_goto): A nonlocal goto can be a call too.


2001-07-25  Andrew MacLeod  <amacleod@redhat.com>
	    Janis Johnson  <janis@us.ibm.com>

	* stmt.c (expand_goto): A nonlocal goto can be a call too.
	* builtins.c (expand_builtin_longjmp): Reverse label and static chain
	pointer parameters to match documented usage of nonlocal_goto.
	* config/ia64/ia64.md (nonlocal_goto): Revert label and static chain
	parameters to their correct order.
	* config/sparc/sparc.md (nonlocal_goto): Revert label and static chain
	parameters to their correct order.

Co-Authored-By: Janis Johnson <janis@us.ibm.com>

From-SVN: r44353
parent ff3daa88
2001-07-25 Andrew MacLeod <amacleod@redhat.com>
Janis Johnson <janis@us.ibm.com>
* stmt.c (expand_goto): A nonlocal goto can be a call too.
* builtins.c (expand_builtin_longjmp): Reverse label and static chain
pointer parameters to match documented usage of nonlocal_goto.
* config/ia64/ia64.md (nonlocal_goto): Revert label and static chain
parameters to their correct order.
* config/sparc/sparc.md (nonlocal_goto): Revert label and static chain
parameters to their correct order.
2001-07-25 Andrew MacLeod <amacleod@redhat.com>
* config/ia64/ia64.h (STRIP_NAME_ENCODING): Strip out '*' as well.
......
......@@ -696,7 +696,7 @@ expand_builtin_longjmp (buf_addr, value)
/* We have to pass a value to the nonlocal_goto pattern that will
get copied into the static_chain pointer, but it does not matter
what that value is, because builtin_setjmp does not use it. */
emit_insn (gen_nonlocal_goto (value, fp, stack, lab));
emit_insn (gen_nonlocal_goto (value, lab, stack, fp));
else
#endif
{
......
......@@ -4986,9 +4986,9 @@
{
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, \"__ia64_nonlocal_goto\"),
LCT_NORETURN, VOIDmode, 3,
operands[3], Pmode,
operands[1], Pmode,
copy_to_reg (XEXP (operands[2], 0)), Pmode,
operands[1], Pmode);
operands[3], Pmode);
emit_barrier ();
DONE;
}")
......
......@@ -8970,9 +8970,9 @@
#if 0
rtx chain = operands[0];
#endif
rtx fp = operands[1];
rtx lab = operands[1];
rtx stack = operands[2];
rtx lab = operands[3];
rtx fp = operands[3];
rtx labreg;
/* Trap instruction to flush all the register windows. */
......
......@@ -842,12 +842,17 @@ expand_goto (label)
/* Search backwards to the jump insn and mark it as a
non-local goto. */
for (insn = get_last_insn ();
GET_CODE (insn) != JUMP_INSN;
insn = PREV_INSN (insn))
continue;
REG_NOTES (insn) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO, const0_rtx,
REG_NOTES (insn));
for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
{
if (GET_CODE (insn) == JUMP_INSN)
{
REG_NOTES (insn) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO,
const0_rtx, REG_NOTES (insn));
break;
}
else if (GET_CODE (insn) == CALL_INSN)
break;
}
}
else
expand_goto_internal (label, label_rtx (label), NULL_RTX);
......
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