From 37c5f877a4528d28fd4624373af09bf19df42c13 Mon Sep 17 00:00:00 2001 From: Oleg Endo Date: Sun, 24 Aug 2014 10:46:25 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 9 +++++++++ gcc/config/sh/sh.c | 6 ++++++ gcc/config/sh/sh.opt | 2 +- gcc/doc/invoke.texi | 19 +++++++++++-------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/sh/pr61996.c | 12 ++++++++++++ 6 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.target/sh/pr61996.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d0ae1f8..703a489 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2014-08-24 Oleg Endo + + 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 * system.h (CALLER_SAVE_PROFITABLE): Poison. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 13eb714..0f286bc 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -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")) diff --git a/gcc/config/sh/sh.opt b/gcc/config/sh/sh.opt index 1834c6b..bb6d395 100644 --- a/gcc/config/sh/sh.opt +++ b/gcc/config/sh/sh.opt @@ -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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8343783..7debd6b 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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} diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e04f5b3..82e1047 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-08-24 Oleg Endo + + PR target/61996 + * gcc.target/sh/pr61996.c: New. + 2014-08-23 Edward Smith-Rowland <3dw4rd@verizon.net> * g++.dg/cpp0x/cplusplus.C: New. diff --git a/gcc/testsuite/gcc.target/sh/pr61996.c b/gcc/testsuite/gcc.target/sh/pr61996.c new file mode 100644 index 0000000..51a5f92 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr61996.c @@ -0,0 +1,12 @@ +/* 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; +} -- 2.7.4