OSDN Git Service

sparc: Default memory model to TSO for Linux and Solaris.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Dec 2011 19:22:44 +0000 (19:22 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Dec 2011 19:22:44 +0000 (19:22 +0000)
        * config/sparc/tso.h: New file.
        * config.gcc (sparc-*-linux*, sparc*-*-solaris2*): Use it.
        * config/sparc/sparc.c (sparc_option_override): Honor
        SUBTARGET_DEFAULT_MEMORY_MODEL.
        * config/sparc/sparc.h (SUBTARGET_DEFAULT_MEMORY_MODEL): New.

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

gcc/ChangeLog
gcc/config.gcc
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.h
gcc/config/sparc/tso.h [new file with mode: 0644]

index 6043551..2b324a4 100644 (file)
@@ -1,3 +1,11 @@
+2011-12-13  Richard Henderson  <rth@redhat.com>
+
+       * config/sparc/tso.h: New file.
+       * config.gcc (sparc-*-linux*, sparc*-*-solaris2*): Use it.
+       * config/sparc/sparc.c (sparc_option_override): Honor
+       SUBTARGET_DEFAULT_MEMORY_MODEL.
+       * config/sparc/sparc.h (SUBTARGET_DEFAULT_MEMORY_MODEL): New.
+
 2011-12-13  Aldy Hernandez  <aldyh@redhat.com>
 
        PR/51443
index a477289..d0f7b28 100644 (file)
@@ -2357,7 +2357,7 @@ sparc-*-rtems*)
        tmake_file="sparc/t-sparc sparc/t-elf t-rtems"
        ;;
 sparc-*-linux*)
-       tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h"
+       tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
        extra_options="${extra_options} sparc/long-double-switch.opt"
        case ${target} in
            *-leon-*)
@@ -2384,7 +2384,7 @@ sparc-*-netbsdelf*)
        tmake_file="${tmake_file} sparc/t-sparc"
        ;;
 sparc*-*-solaris2*)
-       tm_file="sparc/biarch64.h ${tm_file} ${sol2_tm_file} sol2-bi.h"
+       tm_file="sparc/biarch64.h ${tm_file} ${sol2_tm_file} sol2-bi.h sparc/tso.h"
        case ${target} in
            sparc64-*-* | sparcv9-*-*)
                tm_file="sparc/default-64.h ${tm_file}"
@@ -2410,7 +2410,7 @@ sparc64-*-rtems*)
        tmake_file="${tmake_file} sparc/t-sparc t-rtems"
        ;;
 sparc64-*-linux*)
-       tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default-64.h sparc/linux64.h"
+       tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default-64.h sparc/linux64.h sparc/tso.h"
        extra_options="${extra_options} sparc/long-double-switch.opt"
        tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64"
        ;;
index 713db26..20efb00 100644 (file)
@@ -1162,8 +1162,12 @@ sparc_option_override (void)
 
   if (sparc_memory_model == SMM_DEFAULT)
     {
+      /* Choose the memory model for the operating system.  */
+      enum sparc_memory_model_type os_default = SUBTARGET_DEFAULT_MEMORY_MODEL;
+      if (os_default != SMM_DEFAULT)
+       sparc_memory_model = os_default;
       /* Choose the most relaxed model for the processor.  */
-      if (TARGET_V9)
+      else if (TARGET_V9)
        sparc_memory_model = SMM_RMO;
       else if (TARGET_V8)
        sparc_memory_model = SMM_PSO;
index 32f8c10..bb6b079 100644 (file)
@@ -1755,3 +1755,8 @@ extern int sparc_indent_opcode;
 #define MASK_DEBUG_ALL                 MASK_DEBUG_OPTIONS
 
 #define TARGET_DEBUG_OPTIONS           (sparc_debug & MASK_DEBUG_OPTIONS)
+
+/* By default, use the weakest memory model for the cpu.  */
+#ifndef SUBTARGET_DEFAULT_MEMORY_MODEL
+#define SUBTARGET_DEFAULT_MEMORY_MODEL SMM_DEFAULT
+#endif
diff --git a/gcc/config/sparc/tso.h b/gcc/config/sparc/tso.h
new file mode 100644 (file)
index 0000000..c81ea4d
--- /dev/null
@@ -0,0 +1,23 @@
+/* Include fragment for Sparc TSO operating systems.
+   Copyright (C) 2011 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* This operating system sets PSTATE.MM to the TSO memory model.  */
+#undef SUBTARGET_DEFAULT_MEMORY_MODEL
+#define SUBTARGET_DEFAULT_MEMORY_MODEL SMM_TSO