* configure.ac: Tweak GAS check for LEON instructions on SPARC.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Apr 2014 10:03:46 +0000 (10:03 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Apr 2014 10:03:46 +0000 (10:03 +0000)
* 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.

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

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

index b25f1f6..83c01a5 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 c02aec5..64e4095 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 fd5691f..e6e237f 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 4326867..e806873 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 91de233..a3154bb 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 ff43f26..da7a00e 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