aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2001-07-25 13:33:17 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>2001-07-25 13:33:17 +0000
commit7c2b017c9a5f9a81dcf6b2b2047fd10165d19420 (patch)
treee7c323638a787cb35876771b5347818a79319262 /gcc
parentff3daa889a35408d19790c6a5bd01fed99362c1d (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/builtins.c2
-rw-r--r--gcc/config/ia64/ia64.md4
-rw-r--r--gcc/config/sparc/sparc.md4
-rw-r--r--gcc/stmt.c17
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. */
diff --git a/gcc/stmt.c b/gcc/stmt.c
index c95db81..1692916 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);