[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