aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-10-22 12:05:31 +0000
committerRichard Stallman <rms@gnu.org>1992-10-22 12:05:31 +0000
commit875c5a311a5d97da6163e9a2140f780fb20f18a3 (patch)
treec0bf16b29b9c2cdb15be3229858caef0158e9e5b
parent4cdb3e7843ead19ab0e8a49af32dc76bbc8755ef (diff)
downloadgcc-875c5a311a5d97da6163e9a2140f780fb20f18a3.zip
gcc-875c5a311a5d97da6163e9a2140f780fb20f18a3.tar.gz
gcc-875c5a311a5d97da6163e9a2140f780fb20f18a3.tar.bz2
(GO_IF_INDEXABLE_BASE): Allow LABEL_REF only if it's for a jump table.
From-SVN: r2553
-rw-r--r--gcc/config/m68k/m68k.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 4b1497d..0ae5425 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -1128,8 +1128,15 @@ __transfer_from_trampoline () \
#define GO_IF_NONINDEXED_ADDRESS(X, ADDR) \
{ if (INDIRECTABLE_1_ADDRESS_P (X)) goto ADDR; }
-#define GO_IF_INDEXABLE_BASE(X, ADDR) \
-{ if (GET_CODE (X) == LABEL_REF) goto ADDR; \
+/* Only labels on dispatch tables are valid for indexing from. */
+#define GO_IF_INDEXABLE_BASE(X, ADDR) \
+{ rtx temp; \
+ if (GET_CODE (X) == LABEL_REF \
+ && (temp = next_nonnote_insn (XEXP (X, 0))) != 0 \
+ && GET_CODE (temp) == JUMP_INSN \
+ && (GET_CODE (PATTERN (temp)) == ADDR_VEC \
+ || GET_CODE (PATTERN (temp)) == ADDR_DIFF_VEC)) \
+ goto ADDR; \
if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR; }
#define GO_IF_INDEXING(X, ADDR) \