From 7c2b017c9a5f9a81dcf6b2b2047fd10165d19420 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Wed, 25 Jul 2001 13:33:17 +0000 Subject: [PATCH] stmt.c (expand_goto): A nonlocal goto can be a call too. 2001-07-25 Andrew MacLeod Janis Johnson * 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 From-SVN: r44353 --- gcc/ChangeLog | 11 +++++++++++ gcc/builtins.c | 2 +- gcc/config/ia64/ia64.md | 4 ++-- gcc/config/sparc/sparc.md | 4 ++-- gcc/stmt.c | 17 +++++++++++------ 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d06fdea127..e8716379fbd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2001-07-25 Andrew MacLeod + Janis Johnson + + * 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 * config/ia64/ia64.h (STRIP_NAME_ENCODING): Strip out '*' as well. diff --git a/gcc/builtins.c b/gcc/builtins.c index c2ce7c8d49b..985324a7375 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -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 { diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md index 8959fbda88d..6d1821f012c 100644 --- a/gcc/config/ia64/ia64.md +++ b/gcc/config/ia64/ia64.md @@ -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; }") diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index 5a1cb92861e..51a8e70e8a9 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -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. */ diff --git a/gcc/stmt.c b/gcc/stmt.c index c95db81de4a..169291656d9 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -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); -- 2.30.2