Skip TRUNCATE operators in const pool addresses for v850 short switch tables
authorNick Clifton <nickc@gcc.gnu.org>
Fri, 31 Aug 2001 17:10:57 +0000 (17:10 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Fri, 31 Aug 2001 17:10:57 +0000 (17:10 +0000)
From-SVN: r45326

gcc/config/v850/v850.h

index 281f219..5baef15 100644 (file)
@@ -1248,6 +1248,18 @@ do {                                                                     \
 #undef  USER_LABEL_PREFIX
 #define USER_LABEL_PREFIX "_"
 
+/* When ASM_OUTPUT_SHORT is used to emit the offsets for a switch
+   table it can encounter (TRUNCATE:HI (MINUS:SI (LABEL_REF:SI) (LABEL_REF:SI))).
+   output_addr_const will normally barf at this, but it is OK to omit
+   the truncate and just emit the difference of the two labels.  The
+   .hword directive will automatically handle the truncation for us.  */
+
+#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL)         \
+  if (GET_CODE (x) == TRUNCATE)                                \
+    return output_addr_const (FILE, XEXP (X, 0));      \
+  else                                                 \
+    goto FAIL;
+
 /* This is how to output an assembler line defining a `double' constant.
    It is .double or .float, depending.  */