aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2009-08-03 16:09:19 +0000
committerUros Bizjak <ubizjak@gmail.com>2009-08-03 16:09:19 +0000
commitdfd33a79001ca5ce79ace6963cdbcabdc4e14cbf (patch)
tree970dd175d84c4e238f2fcd82f9b05d008fe0dcdb
parenta17017502c0fed248533ac866236de5a6dcbe21f (diff)
* config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST
constants referencing TLS symbols. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch@150373 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/alpha/alpha.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1fe71240bf1..446f5a0bdfe 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-08-03 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST
+ constants referencing TLS symbols.
+
2009-07-30 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.c (override_options): Default
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 21b4342a556..c6182dc6181 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -2052,11 +2052,22 @@ alpha_legitimate_constant_p (rtx x)
switch (GET_CODE (x))
{
- case CONST:
case LABEL_REF:
case HIGH:
return true;
+ case CONST:
+ if (GET_CODE (XEXP (x, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)
+ x = XEXP (XEXP (x, 0), 0);
+ else
+ return true;
+
+ if (GET_CODE (x) != SYMBOL_REF)
+ return true;
+
+ /* FALLTHRU */
+
case SYMBOL_REF:
/* TLS symbols are never valid. */
return SYMBOL_REF_TLS_MODEL (x) == 0;