(PIC_CASE_VECTOR_ADDRESS): Defined.
authorRichard Stallman <rms@gnu.org>
Sun, 1 Aug 1993 20:14:21 +0000 (20:14 +0000)
committerRichard Stallman <rms@gnu.org>
Sun, 1 Aug 1993 20:14:21 +0000 (20:14 +0000)
(GO_IF_LEGITIMATE_ADDRESS): If pic, accept LABEL+INDEX.

From-SVN: r5051

gcc/config/m68k/m68k.h

index 215d41b1e16534562181f5eb12ec330562dfb03c..72d94572b14a9e52b3791171175671ea3488c4c5 100644 (file)
@@ -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
 \f
 /* Try machine-dependent ways of modifying an illegitimate address
    to be legitimate.  If we find one, return the new, valid address.