]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Oct 2008 18:31:45 +0000 (18:31 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Oct 2008 18:31:45 +0000 (18:31 +0000)
* config/mn10300/mn10300.h (OUTPUT_ADDR_CONST_EXTRA): Handle
UNSPEC_GOTSYM_OFFs.
* config/mn10300/mn10300.c (legitimate_pic_operand_p): Return true
for UNSPEC_GOTSYM_OFFs.
* config/mn10300/mn10300.md (UNSPEC_GOTSYM_OFF): New unspec.
(add_GOT_to_pic_reg): Use it.
* config/mn10300/constraints.md (S): Allow UNSPEC_GOTSYM_OFF.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141148 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mn10300/constraints.md
gcc/config/mn10300/mn10300.c
gcc/config/mn10300/mn10300.h
gcc/config/mn10300/mn10300.md

index 7983e984915a460c738983a9dccfa863e6535b39..a3b15b4161de097560369f4e523967dabb180c14 100644 (file)
@@ -1,3 +1,13 @@
+2008-10-15  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * config/mn10300/mn10300.h (OUTPUT_ADDR_CONST_EXTRA): Handle
+       UNSPEC_GOTSYM_OFFs.
+       * config/mn10300/mn10300.c (legitimate_pic_operand_p): Return true
+       for UNSPEC_GOTSYM_OFFs.
+       * config/mn10300/mn10300.md (UNSPEC_GOTSYM_OFF): New unspec.
+       (add_GOT_to_pic_reg): Use it.
+       * config/mn10300/constraints.md (S): Allow UNSPEC_GOTSYM_OFF.
+
 2008-10-15  Jan Sjodin  <jan.sjodin@amd.com>
            Harsha Jagasia  <harsha.jagasia@amd.com>
 
index 53f128750c7d39fdfea48ccd635d3dd8dbb5d1b4..8dbf63a75ba706af86d0a6c4b2b2702bb2d07100 100644 (file)
@@ -68,7 +68,8 @@
   (if_then_else (match_test "flag_pic")
        (and (match_test "GET_CODE (op) == UNSPEC")
             (ior (match_test "XINT (op, 1) == UNSPEC_PLT")
-                 (match_test "XINT (op, 1) == UNSPEC_PIC")))
+                 (match_test "XINT (op, 1) == UNSPEC_PIC")
+                 (match_test "XINT (op, 1) == UNSPEC_GOTSYM_OFF")))
        (match_test "GET_CODE (op) == SYMBOL_REF")))
 
 ;; Integer constraints
index f89e0751c4c90a680376267d004afbdc3752678f..eed829972443866d1646566bf20a56ca76c92a9f 100644 (file)
@@ -1869,7 +1869,8 @@ legitimate_pic_operand_p (rtx x)
       && (XINT (x, 1) == UNSPEC_PIC
          || XINT (x, 1) == UNSPEC_GOT
          || XINT (x, 1) == UNSPEC_GOTOFF
-         || XINT (x, 1) == UNSPEC_PLT))
+         || XINT (x, 1) == UNSPEC_PLT
+         || XINT (x, 1) == UNSPEC_GOTSYM_OFF))
       return 1;
 
   fmt = GET_RTX_FORMAT (GET_CODE (x));
index c1c8057942778f1cb66cd4325dfd16c86d830645..d83eedfb08a914e98e215499dfdb8c11807f06c3 100644 (file)
@@ -738,7 +738,7 @@ while (0)
    constants.  Used for PIC-specific UNSPECs.  */
 #define OUTPUT_ADDR_CONST_EXTRA(STREAM, X, FAIL) \
   do                                                                   \
-    if (GET_CODE (X) == UNSPEC && XVECLEN ((X), 0) == 1)       \
+    if (GET_CODE (X) == UNSPEC)                                                \
       {                                                                        \
        switch (XINT ((X), 1))                                          \
          {                                                             \
@@ -762,6 +762,12 @@ while (0)
            output_addr_const ((STREAM), XVECEXP ((X), 0, 0));          \
            fputs ("@PLT", (STREAM));                                   \
            break;                                                      \
+         case UNSPEC_GOTSYM_OFF:                                       \
+           assemble_name (STREAM, GOT_SYMBOL_NAME);                    \
+           fputs ("-(", STREAM);                                       \
+           output_addr_const (STREAM, XVECEXP (X, 0, 0));              \
+           fputs ("-.)", STREAM);                                      \
+           break;                                                      \
          default:                                                      \
            goto FAIL;                                                  \
          }                                                             \
index 8fbbdc87df5a06b0155cbdd2a05d662a1c07461f..38aa37645ac28c532b86e804a6b3447d47e292f7 100644 (file)
@@ -45,6 +45,7 @@
   (UNSPEC_GOT          2)
   (UNSPEC_GOTOFF       3)
   (UNSPEC_PLT          4)
+  (UNSPEC_GOTSYM_OFF   5)
 ])
 
 (include "predicates.md")
   [(set (reg:SI PIC_REG)
        (plus:SI
         (reg:SI PIC_REG)
-        (const
-         (unspec [(minus:SI
-                   (match_dup 1)
-                   (const (minus:SI
-                           (const (match_operand:SI 0 "" ""))
-                           (pc))))
-                 ] UNSPEC_PIC))))]
-  ""
-  "
-{
-  operands[1] = gen_rtx_SYMBOL_REF (VOIDmode, GOT_SYMBOL_NAME);
-}")
+        (const:SI
+         (unspec:SI [(match_operand:SI 0 "" "")] UNSPEC_GOTSYM_OFF))))]
+  "")
 
 (define_expand "symGOT2reg"
   [(match_operand:SI 0 "" "")