]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ia64.c (sdata_symbolic_operand): Consider small CONSTANT_POOL_ADDRESS_P addresses...
authorRichard Henderson <rth@cygnus.com>
Thu, 1 Jun 2000 00:14:13 +0000 (17:14 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 1 Jun 2000 00:14:13 +0000 (17:14 -0700)
        * config/ia64/ia64.c (sdata_symbolic_operand): Consider small
        CONSTANT_POOL_ADDRESS_P addresses for .sdata.
        * config/ia64/sysv4.h (SELECT_RTX_SECTION): New.

From-SVN: r34319

gcc/ChangeLog
gcc/config/ia64/ia64.c
gcc/config/ia64/sysv4.h

index 53ba7fc3799161c9cc06ecf3c2d8c7e84622c313..9d60871880156682055d3d08df6c45ce065a148f 100644 (file)
@@ -1,3 +1,9 @@
+2000-05-31  Richard Henderson  <rth@cygnus.com>
+
+       * config/ia64/ia64.c (sdata_symbolic_operand): Consider small
+       CONSTANT_POOL_ADDRESS_P addresses for .sdata.
+       * config/ia64/sysv4.h (SELECT_RTX_SECTION): New.
+
 2000-05-31  Richard Henderson  <rth@cygnus.com>
 
        * config/ia64/ia64-protos.h (ia64_expand_prediction): Remove.
index 3e170f85833fd870b43b1ff48aae8f003b901033..8328d7f9b5604e20a6378970149c7fcb2db0b0c3 100644 (file)
@@ -144,13 +144,19 @@ sdata_symbolic_operand (op, mode)
 {
   switch (GET_CODE (op))
     {
+    case CONST:
+      if (GET_CODE (XEXP (op, 0)) != PLUS
+         || GET_CODE (XEXP (XEXP (op, 0), 0)) != SYMBOL_REF)
+       break;
+      op = XEXP (XEXP (op, 0), 0);
+      /* FALLTHRU */
+
     case SYMBOL_REF:
-      return XSTR (op, 0)[0] == SDATA_NAME_FLAG_CHAR;
+      if (CONSTANT_POOL_ADDRESS_P (op))
+       return GET_MODE_SIZE (get_pool_mode (op)) <= ia64_section_threshold;
+      else
+        return XSTR (op, 0)[0] == SDATA_NAME_FLAG_CHAR;
 
-    case CONST:
-      return (GET_CODE (XEXP (op, 0)) == PLUS
-             && GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF
-             && XSTR (XEXP (XEXP (op, 0), 0), 0)[0] == SDATA_NAME_FLAG_CHAR);
     default:
       break;
     }
index 7e9e2c97a9055ad227c25aa771c901cf9779b51e..9c1c1250a924c7c6e9e5d863238a884873d94776 100644 (file)
@@ -226,6 +226,21 @@ do {                                                                       \
     const_section ();                                                  \
 }
 
+/* Similarly for constant pool data.  */
+
+extern int ia64_section_threshold;
+#undef SELECT_RTX_SECTION
+#define SELECT_RTX_SECTION(MODE, RTX)                                  \
+{                                                                      \
+  if (GET_MODE_SIZE (MODE) > 0                                         \
+      && GET_MODE_SIZE (MODE) <= ia64_section_threshold)               \
+    sdata_section ();                                                  \
+  else if (flag_pic && symbolic_operand ((RTX), (MODE)))               \
+    data_section ();                                                   \
+  else                                                                 \
+    const_section ();                                                  \
+}
+
 #undef EXTRA_SECTIONS
 #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_sdata, in_sbss