]> 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:03:46 +0000 (10:03 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 28 Apr 2014 10:03:46 +0000 (10:03 +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: r209850

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

index b25f1f66eb5419ae18519750e307318a9a6910ac..83c01a52895f75b38c9433a5df00d16de1d120fa 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-27  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * cselib.c (find_slot_memmode): Delete.
index c02aec59f0695b77a64cd8b281225ce2e6c96a8c..64e40955a5358bf4882e6a82e655d53a8c870239 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 fd5691f73becf9d32eb0c3c0c7980b70bf4107b2..e6e237f256fa6aa1bd9793f9f9128e7ae4ec03f9 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 4326867b0eae30a8dcd08c51dee62a0c20da0494..e806873a04e5b0c20fd1c1e039ed1acdde822600 100755 (executable)
@@ -24395,7 +24395,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 91de23300dd9443764a46810aac33a010db0f9d7..a3154bb32f1bb24daf8b2a72ac45b283ab5cb1ee 100644 (file)
@@ -3647,7 +3647,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 ff43f262323e8cc3d4ebbd5635bf037310068ece..da7a00ed00ce9f1e259f2a221bf916489d7bcb39 100644 (file)
@@ -993,6 +993,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
@@ -20961,6 +20962,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