Commit 37c5f877 by Oleg Endo

re PR target/61996 ([SH] -musermode conflicts with -matomic-model=soft-imask)

gcc/
	PR target/61996
	* config/sh/sh.opt (musermode): Allow negative form.
	* config/sh/sh.c (sh_option_override): Disable TARGET_USERMODE for
	targets that don't support it.
	* doc/invoke.texi (SH Options): Rename sh-*-linux* to sh*-*-linux*.
	Document -mno-usermode option.

gcc/testsuite

	PR target/61996
	* gcc.target/sh/pr61996.c: New.

From-SVN: r214406
parent ef24330d
2014-08-24 Oleg Endo <olegendo@gcc.gnu.org>
PR target/61996
* config/sh/sh.opt (musermode): Allow negative form.
* config/sh/sh.c (sh_option_override): Disable TARGET_USERMODE for
targets that don't support it.
* doc/invoke.texi (SH Options): Rename sh-*-linux* to sh*-*-linux*.
Document -mno-usermode option.
2014-08-24 Kito Cheng <kito@0xlab.org>
* system.h (CALLER_SAVE_PROFITABLE): Poison.
......
......@@ -886,6 +886,12 @@ sh_option_override (void)
targetm.asm_out.aligned_op.di = NULL;
targetm.asm_out.unaligned_op.di = NULL;
}
/* User/priviledged mode is supported only on SH3*, SH4* and SH5*.
Disable it for everything else. */
if (! (TARGET_SH3 || TARGET_SH5) && TARGET_USERMODE)
TARGET_USERMODE = false;
if (TARGET_SH1)
{
if (! strcmp (sh_div_str, "call-div1"))
......
......@@ -343,7 +343,7 @@ Target RejectNegative Joined UInteger Var(sh_multcost) Init(-1)
Cost to assume for a multiply insn
musermode
Target Report RejectNegative Var(TARGET_USERMODE)
Target Var(TARGET_USERMODE)
Don't generate privileged-mode only code; implies -mno-inline-ic_invalidate if the inline code would not work in user mode.
;; We might want to enable this by default for TARGET_HARD_SH4, because
......
......@@ -20908,7 +20908,7 @@ Mark the @code{MAC} register as call-clobbered, even if
@item -mieee
@itemx -mno-ieee
@opindex mieee
@opindex mnoieee
@opindex mno-ieee
Control the IEEE compliance of floating-point comparisons, which affects the
handling of cases where the result of a comparison is unordered. By default
@option{-mieee} is implicitly enabled. If @option{-ffinite-math-only} is
......@@ -20948,14 +20948,14 @@ separated list. For details on the atomic built-in functions see
@item none
Disable compiler generated atomic sequences and emit library calls for atomic
operations. This is the default if the target is not @code{sh-*-linux*}.
operations. This is the default if the target is not @code{sh*-*-linux*}.
@item soft-gusa
Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
built-in functions. The generated atomic sequences require additional support
from the interrupt/exception handling code of the system and are only suitable
for SH3* and SH4* single-core systems. This option is enabled by default when
the target is @code{sh-*-linux*} and SH3* or SH4*. When the target is SH4A,
the target is @code{sh*-*-linux*} and SH3* or SH4*. When the target is SH4A,
this option will also partially utilize the hardware atomic instructions
@code{movli.l} and @code{movco.l} to create more efficient code, unless
@samp{strict} is specified.
......@@ -20974,7 +20974,7 @@ setting @code{SR.IMASK = 1111}. This model works only when the program runs
in privileged mode and is only suitable for single-core systems. Additional
support from the interrupt/exception handling code of the system is not
required. This model is enabled by default when the target is
@code{sh-*-linux*} and SH1* or SH2*.
@code{sh*-*-linux*} and SH1* or SH2*.
@item hard-llcs
Generate hardware atomic sequences using the @code{movli.l} and @code{movco.l}
......@@ -21015,11 +21015,14 @@ When generating position-independent code, emit function calls using
the Global Offset Table instead of the Procedure Linkage Table.
@item -musermode
@itemx -mno-usermode
@opindex musermode
Don't generate privileged mode only code. This option
implies @option{-mno-inline-ic_invalidate}
if the inlined code would not work in user mode.
This is the default when the target is @code{sh-*-linux*}.
@opindex mno-usermode
Don't allow (allow) the compiler generating privileged mode code. Specifying
@option{-musermode} also implies @option{-mno-inline-ic_invalidate} if the
inlined code would not work in user mode. @option{-musermode} is the default
when the target is @code{sh*-*-linux*}. If the target is SH1* or SH2*
@option{-musermode} has no effect, since there is no user mode.
@item -multcost=@var{number}
@opindex multcost=@var{number}
......
2014-08-24 Oleg Endo <olegendo@gcc.gnu.org>
PR target/61996
* gcc.target/sh/pr61996.c: New.
2014-08-23 Edward Smith-Rowland <3dw4rd@verizon.net>
* g++.dg/cpp0x/cplusplus.C: New.
......
/* Check that the option -musermode has no effect on targets that do not
support user/privileged mode and that it does not interfere with option
-matomic-model=soft-imask. */
/* { dg-do compile } */
/* { dg-options "-matomic-model=soft-imask" } */
/* { dg-skip-if "" { "sh*-*-*" } { "*"} { "-m1*" "-m2*" } } */
int
test (void)
{
return 0;
}
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