aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/v850
diff options
context:
space:
mode:
authorNick Clifton <nickc@gcc.gnu.org>2001-08-31 17:10:57 +0000
committerNick Clifton <nickc@gcc.gnu.org>2001-08-31 17:10:57 +0000
commit73a697d96e7ad5c00227ffd7a17611721f457512 (patch)
treeeed9675684db1b68b36c9e51e1cd98e170cbc5d9 /gcc/config/v850
parentef7112de26b338a77e76e5e2b2ef0ca4ed306a37 (diff)
downloadgcc-73a697d96e7ad5c00227ffd7a17611721f457512.zip
gcc-73a697d96e7ad5c00227ffd7a17611721f457512.tar.gz
gcc-73a697d96e7ad5c00227ffd7a17611721f457512.tar.bz2
Skip TRUNCATE operators in const pool addresses for v850 short switch tables
From-SVN: r45326
Diffstat (limited to 'gcc/config/v850')
-rw-r--r--gcc/config/v850/v850.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index 281f219..5baef15 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -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. */