diff options
author | Richard Stallman <rms@gnu.org> | 1993-08-01 20:14:21 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-08-01 20:14:21 +0000 |
commit | 04e61bd4dd50def56f95dc0f00c428d29cab9242 (patch) | |
tree | 663e3537e84702b88590a15e609eb577db03a7b9 | |
parent | 19b2fd27ea262649afb3869fa0b1e98153121829 (diff) | |
download | gcc-04e61bd4dd50def56f95dc0f00c428d29cab9242.zip gcc-04e61bd4dd50def56f95dc0f00c428d29cab9242.tar.gz gcc-04e61bd4dd50def56f95dc0f00c428d29cab9242.tar.bz2 |
(PIC_CASE_VECTOR_ADDRESS): Defined.
(GO_IF_LEGITIMATE_ADDRESS): If pic, accept LABEL+INDEX.
From-SVN: r5051
-rw-r--r-- | gcc/config/m68k/m68k.h | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 215d41b..72d9457 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -1217,9 +1217,19 @@ __transfer_from_trampoline () \ || INTVAL (XEXP (X, 1)) == 4 \ || INTVAL (XEXP (X, 1)) == 8))) -#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ -{ GO_IF_NONINDEXED_ADDRESS (X, ADDR); \ - GO_IF_INDEXED_ADDRESS (X, ADDR); } +/* If pic, we accept INDEX+LABEL, which is what do_tablejump makes. */ +#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ +{ GO_IF_NONINDEXED_ADDRESS (X, ADDR); \ + GO_IF_INDEXED_ADDRESS (X, ADDR); \ + if (flag_pic && MODE == CASE_VECTOR_MODE && GET_CODE (X) == PLUS \ + && LEGITIMATE_INDEX_P (XEXP (X, 0)) \ + && GET_CODE (XEXP (X, 1)) == LABEL_REF) \ + goto ADDR; } + +/* Don't call memory_address_noforce for the address to fetch + the switch offset. This address is ok as it stands (see above), + but memory_address_noforce would alter it. */ +#define PIC_CASE_VECTOR_ADDRESS(index) index /* Try machine-dependent ways of modifying an illegitimate address to be legitimate. If we find one, return the new, valid address. |