[pypy-commit] stmgc use-gcc: Add the "__seg_fs" address space too, for completeness.
arigo
noreply at buildbot.pypy.org
Sun May 24 15:33:42 CEST 2015
Author: Armin Rigo <arigo at tunes.org>
Branch: use-gcc
Changeset: r1774:59ef2cb65d28
Date: 2015-05-24 15:34 +0200
http://bitbucket.org/pypy/stmgc/changeset/59ef2cb65d28/
Log: Add the "__seg_fs" address space too, for completeness.
diff --git a/gcc-seg-gs/gcc-5.1.0-patch.diff b/gcc-seg-gs/gcc-5.1.0-patch.diff
--- a/gcc-seg-gs/gcc-5.1.0-patch.diff
+++ b/gcc-seg-gs/gcc-5.1.0-patch.diff
@@ -2,19 +2,21 @@
===================================================================
--- gcc/config/i386/i386-c.c (revision 223607)
+++ gcc/config/i386/i386-c.c (working copy)
-@@ -572,6 +572,8 @@
+@@ -572,6 +572,9 @@
ix86_tune,
ix86_fpmath,
cpp_define);
+
++ cpp_define (parse_in, "__SEG_FS");
+ cpp_define (parse_in, "__SEG_GS");
}
-@@ -586,6 +588,8 @@
+@@ -586,6 +589,9 @@
/* Update pragma hook to allow parsing #pragma GCC target. */
targetm.target_option.pragma_parse = ix86_pragma_target_parse;
++ c_register_addr_space ("__seg_fs", ADDR_SPACE_SEG_FS);
+ c_register_addr_space ("__seg_gs", ADDR_SPACE_SEG_GS);
+
#ifdef REGISTER_SUBTARGET_PRAGMAS
@@ -24,23 +26,28 @@
===================================================================
--- gcc/config/i386/i386.c (revision 223607)
+++ gcc/config/i386/i386.c (working copy)
-@@ -15963,6 +15963,15 @@
+@@ -15963,6 +15963,20 @@
fputs (" PTR ", file);
}
+ /**** <AR> ****/
-+ if (MEM_ADDR_SPACE(x) == ADDR_SPACE_SEG_GS)
++ switch (MEM_ADDR_SPACE(x))
+ {
-+ if (ASSEMBLER_DIALECT == ASM_ATT)
-+ putc ('%', file);
-+ fputs ("gs:", file);
++ case ADDR_SPACE_SEG_FS:
++ fputs (ASSEMBLER_DIALECT == ASM_ATT ? "%fs:" : "fs:", file);
++ break;
++ case ADDR_SPACE_SEG_GS:
++ fputs (ASSEMBLER_DIALECT == ASM_ATT ? "%gs:" : "gs:", file);
++ break;
++ default:
++ break;
+ }
+ /**** </AR> ****/
+
x = XEXP (x, 0);
/* Avoid (%rip) for call operands. */
if (CONSTANT_ADDRESS_P (x) && code == 'P'
-@@ -51816,6 +51825,111 @@
+@@ -51816,6 +51830,130 @@
}
#endif
@@ -52,7 +59,9 @@
+static machine_mode
+ix86_addr_space_pointer_mode (addr_space_t as)
+{
-+ gcc_assert (ADDR_SPACE_GENERIC_P (as) || as == ADDR_SPACE_SEG_GS);
++ gcc_assert (as == ADDR_SPACE_GENERIC ||
++ as == ADDR_SPACE_SEG_FS ||
++ as == ADDR_SPACE_SEG_GS);
+ return ptr_mode;
+}
+
@@ -60,7 +69,9 @@
+static machine_mode
+ix86_addr_space_address_mode (addr_space_t as)
+{
-+ gcc_assert (ADDR_SPACE_GENERIC_P (as) || as == ADDR_SPACE_SEG_GS);
++ gcc_assert (as == ADDR_SPACE_GENERIC ||
++ as == ADDR_SPACE_SEG_FS ||
++ as == ADDR_SPACE_SEG_GS);
+ return Pmode;
+}
+
@@ -68,7 +79,9 @@
+static bool
+ix86_addr_space_valid_pointer_mode (machine_mode mode, addr_space_t as)
+{
-+ gcc_assert (ADDR_SPACE_GENERIC_P (as) || as == ADDR_SPACE_SEG_GS);
++ gcc_assert (as == ADDR_SPACE_GENERIC ||
++ as == ADDR_SPACE_SEG_FS ||
++ as == ADDR_SPACE_SEG_GS);
+ return targetm.valid_pointer_mode (mode);
+}
+
@@ -77,7 +90,9 @@
+ix86_addr_space_legitimate_address_p (machine_mode mode, rtx x,
+ bool reg_ok_strict, addr_space_t as)
+{
-+ gcc_assert (ADDR_SPACE_GENERIC_P (as) || as == ADDR_SPACE_SEG_GS);
++ gcc_assert (as == ADDR_SPACE_GENERIC ||
++ as == ADDR_SPACE_SEG_FS ||
++ as == ADDR_SPACE_SEG_GS);
+ return ix86_legitimate_address_p (mode, x, reg_ok_strict);
+}
+
@@ -86,16 +101,23 @@
+ix86_addr_space_legitimize_address (rtx x, rtx oldx,
+ machine_mode mode, addr_space_t as)
+{
-+ gcc_assert (ADDR_SPACE_GENERIC_P (as) || as == ADDR_SPACE_SEG_GS);
++ gcc_assert (as == ADDR_SPACE_GENERIC ||
++ as == ADDR_SPACE_SEG_FS ||
++ as == ADDR_SPACE_SEG_GS);
+ return ix86_legitimize_address (x, oldx, mode);
+}
+
-+/* The default and the SEG_GS address spaces are subset of each other. */
++/* The default, SEG_FS and SEG_GS address spaces are all "subsets" of
++ each other. */
+bool static
+ix86_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
+{
-+ gcc_assert (ADDR_SPACE_GENERIC_P (subset) || subset == ADDR_SPACE_SEG_GS);
-+ gcc_assert (ADDR_SPACE_GENERIC_P (superset) || superset==ADDR_SPACE_SEG_GS);
++ gcc_assert (subset == ADDR_SPACE_GENERIC ||
++ subset == ADDR_SPACE_SEG_FS ||
++ subset == ADDR_SPACE_SEG_GS);
++ gcc_assert (superset == ADDR_SPACE_GENERIC ||
++ superset == ADDR_SPACE_SEG_FS ||
++ superset == ADDR_SPACE_SEG_GS);
+ return true;
+}
+
@@ -107,8 +129,12 @@
+ addr_space_t from_as = TYPE_ADDR_SPACE (TREE_TYPE (from_type));
+ addr_space_t to_as = TYPE_ADDR_SPACE (TREE_TYPE (to_type));
+
-+ gcc_assert (ADDR_SPACE_GENERIC_P (from_as) || from_as == ADDR_SPACE_SEG_GS);
-+ gcc_assert (ADDR_SPACE_GENERIC_P (to_as) || to_as == ADDR_SPACE_SEG_GS);
++ gcc_assert (from_as == ADDR_SPACE_GENERIC ||
++ from_as == ADDR_SPACE_SEG_FS ||
++ from_as == ADDR_SPACE_SEG_GS);
++ gcc_assert (to_as == ADDR_SPACE_GENERIC ||
++ to_as == ADDR_SPACE_SEG_FS ||
++ to_as == ADDR_SPACE_SEG_GS);
+
+ return op;
+}
@@ -156,12 +182,13 @@
===================================================================
--- gcc/config/i386/i386.h (revision 223607)
+++ gcc/config/i386/i386.h (working copy)
-@@ -2568,6 +2568,10 @@
+@@ -2568,6 +2568,11 @@
/* For switching between functions with different target attributes. */
#define SWITCHABLE_TARGET 1
+enum {
-+ ADDR_SPACE_SEG_GS = 1
++ ADDR_SPACE_SEG_FS = 1,
++ ADDR_SPACE_SEG_GS = 2
+};
+
/*
More information about the pypy-commit
mailing list