diff options
author | Richard Stallman <rms@gnu.org> | 1992-10-22 12:05:31 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-10-22 12:05:31 +0000 |
commit | 875c5a311a5d97da6163e9a2140f780fb20f18a3 (patch) | |
tree | c0bf16b29b9c2cdb15be3229858caef0158e9e5b /gcc | |
parent | 4cdb3e7843ead19ab0e8a49af32dc76bbc8755ef (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/m68k/m68k.h | 11 |
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) \ |