]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
configure.ac: Tweak GAS check for LEON instructions on SPARC.
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 28 Apr 2014 10:05:29 +0000 (10:05 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 28 Apr 2014 10:05:29 +0000 (10:05 +0000)
* configure.ac: Tweak GAS check for LEON instructions on SPARC.
* configure: Regenerate.
* config/sparc/sparc.opt (muser-mode): New option.
* config/sparc/sync.md (atomic_compare_and_swap<mode>_1): Do not enable
for LEON3.
(atomic_compare_and_swap_leon3_1): New instruction for LEON3.
* doc/invoke.texi (SPARC options): Document -muser-mode.

From-SVN: r209852

gcc/ChangeLog
gcc/config/sparc/sparc.opt
gcc/config/sparc/sync.md
gcc/configure
gcc/configure.ac
gcc/doc/invoke.texi

index 64444df5b4cd3e787cea30814990b5fc3fbb6336..9edf17a2e9c3cf76aef92eb7c26062dd1e7690ba 100644 (file)
@@ -1,3 +1,13 @@
+2014-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * configure.ac: Tweak GAS check for LEON instructions on SPARC.
+       * configure: Regenerate.
+       * config/sparc/sparc.opt (muser-mode): New option.
+       * config/sparc/sync.md (atomic_compare_and_swap<mode>_1): Do not enable
+       for LEON3.
+       (atomic_compare_and_swap_leon3_1): New instruction for LEON3.
+       * doc/invoke.texi (SPARC options): Document -muser-mode.
+
 2014-04-25  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR target/60941
index 3ccd54fa463d9d877bb223c45a34f6f839be1f06..9de981b85f7f216eadf83b579d795c39127a7825 100644 (file)
@@ -113,6 +113,10 @@ mrelax
 Target
 Optimize tail call instructions in assembler and linker
 
+muser-mode
+Target Report Mask(USER_MODE)
+Do not generate code that can only run in supervisor mode
+
 mcpu=
 Target RejectNegative Joined Var(sparc_cpu_and_features) Enum(sparc_processor_type) Init(PROCESSOR_V7)
 Use features of and schedule code for given CPU
index 130f52191946d52b7175ee48cb5e03f09d11ba41..cf909853b373671e20a75b7a2fec38c2d65e6f2d 100644 (file)
          [(match_operand:I48MODE 2 "register_operand" "r")
           (match_operand:I48MODE 3 "register_operand" "0")]
          UNSPECV_CAS))]
-  "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
+  "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64)"
   "cas<modesuffix>\t%1, %2, %0"
   [(set_attr "type" "multi")])
 
+(define_insn "*atomic_compare_and_swap_leon3_1"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (match_operand:SI 1 "mem_noofs_operand" "+w"))
+   (set (match_dup 1)
+       (unspec_volatile:SI
+         [(match_operand:SI 2 "register_operand" "r")
+          (match_operand:SI 3 "register_operand" "0")]
+         UNSPECV_CAS))]
+  "TARGET_LEON3"
+{
+  if (TARGET_USER_MODE)
+    return "casa\t%1 0xa, %2, %0"; /* ASI for user data space.  */
+  else
+    return "casa\t%1 0xb, %2, %0"; /* ASI for supervisor data space.  */
+}
+  [(set_attr "type" "multi")])
+
 (define_insn "*atomic_compare_and_swapdi_v8plus"
   [(set (match_operand:DI 0 "register_operand" "=h")
        (match_operand:DI 1 "mem_noofs_operand" "+w"))
index 21105517e252ecb465d00314429501c4f340cd9e..3793681d99c66f4b2e9b16c35b2f31262be41e90 100755 (executable)
@@ -24287,7 +24287,7 @@ else
        .align 4
        smac %g2, %g3, %g1
        umac %g2, %g3, %g1
-       cas [%g2], %g3, %g1' > conftest.s
+       casa [%g2] 0xb, %g3, %g1' > conftest.s
     if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
   (eval $ac_try) 2>&5
index b87c9eda00f220d59141a29606671e32a0a20b90..3ee1d67c0fbcd3e48f623b7ff053aa6b34e958ac 100644 (file)
@@ -3625,7 +3625,7 @@ foo:
        .align 4
        smac %g2, %g3, %g1
        umac %g2, %g3, %g1
-       cas [[%g2]], %g3, %g1],,
+       casa [[%g2]] 0xb, %g3, %g1],,
       [AC_DEFINE(HAVE_AS_LEON, 1,
                 [Define if your assembler supports LEON instructions.])])
     ;;
index 8eafc8a4ed1f676e4530c6b24c2f8670c7a3957b..c39192b7fb1e2c38b85c10ded260bd64af76f8e7 100644 (file)
@@ -930,6 +930,7 @@ See RS/6000 and PowerPC Options.
 -mhard-quad-float  -msoft-quad-float @gol
 -mstack-bias  -mno-stack-bias @gol
 -munaligned-doubles  -mno-unaligned-doubles @gol
+-muser-mode  -mno-user-mode @gol
 -mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
 -mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
 -mcbcond -mno-cbcond @gol
@@ -19264,6 +19265,14 @@ Specifying this option avoids some rare compatibility problems with code
 generated by other compilers.  It is not the default because it results
 in a performance loss, especially for floating-point code.
 
+@item -muser-mode
+@itemx -mno-user-mode
+@opindex muser-mode
+@opindex mno-user-mode
+Do not generate code that can only run in supervisor mode.  This is relevant
+only for the @code{casa} instruction emitted for the LEON3 processor.  The
+default is @option{-mno-user-mode}.
+
 @item -mno-faster-structs
 @itemx -mfaster-structs
 @opindex mno-faster-structs