diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2001-07-25 13:33:17 +0000 |
---|---|---|
committer | Andrew Macleod <amacleod@gcc.gnu.org> | 2001-07-25 13:33:17 +0000 |
commit | 7c2b017c9a5f9a81dcf6b2b2047fd10165d19420 (patch) | |
tree | e7c323638a787cb35876771b5347818a79319262 /gcc | |
parent | ff3daa889a35408d19790c6a5bd01fed99362c1d (diff) | |
download | gcc-7c2b017c9a5f9a81dcf6b2b2047fd10165d19420.zip gcc-7c2b017c9a5f9a81dcf6b2b2047fd10165d19420.tar.gz gcc-7c2b017c9a5f9a81dcf6b2b2047fd10165d19420.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/builtins.c | 2 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.md | 4 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.md | 4 | ||||
-rw-r--r-- | gcc/stmt.c | 17 |
5 files changed, 27 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d06fde..e871637 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,15 @@ 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. diff --git a/gcc/builtins.c b/gcc/builtins.c index c2ce7c8..985324a 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 8959fbd..6d1821f 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 5a1cb92..51a8e70 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. */ @@ -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); |