Commit ba21a04a by Eric Botcazou Committed by Eric Botcazou

configure.ac: Tweak GAS check for LEON instructions on SPARC.

	* 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
parent b976509f
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> 2014-04-27 Richard Sandiford <rdsandiford@googlemail.com>
* cselib.c (find_slot_memmode): Delete. * cselib.c (find_slot_memmode): Delete.
......
...@@ -113,6 +113,10 @@ mrelax ...@@ -113,6 +113,10 @@ mrelax
Target Target
Optimize tail call instructions in assembler and linker 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= mcpu=
Target RejectNegative Joined Var(sparc_cpu_and_features) Enum(sparc_processor_type) Init(PROCESSOR_V7) Target RejectNegative Joined Var(sparc_cpu_and_features) Enum(sparc_processor_type) Init(PROCESSOR_V7)
Use features of and schedule code for given CPU Use features of and schedule code for given CPU
......
...@@ -200,10 +200,27 @@ ...@@ -200,10 +200,27 @@
[(match_operand:I48MODE 2 "register_operand" "r") [(match_operand:I48MODE 2 "register_operand" "r")
(match_operand:I48MODE 3 "register_operand" "0")] (match_operand:I48MODE 3 "register_operand" "0")]
UNSPECV_CAS))] UNSPECV_CAS))]
"(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)" "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64)"
"cas<modesuffix>\t%1, %2, %0" "cas<modesuffix>\t%1, %2, %0"
[(set_attr "type" "multi")]) [(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" (define_insn "*atomic_compare_and_swapdi_v8plus"
[(set (match_operand:DI 0 "register_operand" "=h") [(set (match_operand:DI 0 "register_operand" "=h")
(match_operand:DI 1 "mem_noofs_operand" "+w")) (match_operand:DI 1 "mem_noofs_operand" "+w"))
......
...@@ -24395,7 +24395,7 @@ else ...@@ -24395,7 +24395,7 @@ else
.align 4 .align 4
smac %g2, %g3, %g1 smac %g2, %g3, %g1
umac %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' 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 echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5 (eval $ac_try) 2>&5
......
...@@ -3647,7 +3647,7 @@ foo: ...@@ -3647,7 +3647,7 @@ foo:
.align 4 .align 4
smac %g2, %g3, %g1 smac %g2, %g3, %g1
umac %g2, %g3, %g1 umac %g2, %g3, %g1
cas [[%g2]], %g3, %g1],, casa [[%g2]] 0xb, %g3, %g1],,
[AC_DEFINE(HAVE_AS_LEON, 1, [AC_DEFINE(HAVE_AS_LEON, 1,
[Define if your assembler supports LEON instructions.])]) [Define if your assembler supports LEON instructions.])])
;; ;;
......
...@@ -993,6 +993,7 @@ See RS/6000 and PowerPC Options. ...@@ -993,6 +993,7 @@ See RS/6000 and PowerPC Options.
-mhard-quad-float -msoft-quad-float @gol -mhard-quad-float -msoft-quad-float @gol
-mstack-bias -mno-stack-bias @gol -mstack-bias -mno-stack-bias @gol
-munaligned-doubles -mno-unaligned-doubles @gol -munaligned-doubles -mno-unaligned-doubles @gol
-muser-mode -mno-user-mode @gol
-mv8plus -mno-v8plus -mvis -mno-vis @gol -mv8plus -mno-v8plus -mvis -mno-vis @gol
-mvis2 -mno-vis2 -mvis3 -mno-vis3 @gol -mvis2 -mno-vis2 -mvis3 -mno-vis3 @gol
-mcbcond -mno-cbcond @gol -mcbcond -mno-cbcond @gol
...@@ -20961,6 +20962,14 @@ Specifying this option avoids some rare compatibility problems with code ...@@ -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 generated by other compilers. It is not the default because it results
in a performance loss, especially for floating-point code. 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 @item -mno-faster-structs
@itemx -mfaster-structs @itemx -mfaster-structs
@opindex mno-faster-structs @opindex mno-faster-structs
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment