re PR target/61996 ([SH] -musermode conflicts with -matomic-model=soft-imask)
authorOleg Endo <olegendo@gcc.gnu.org>
Sun, 24 Aug 2014 10:46:25 +0000 (10:46 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Sun, 24 Aug 2014 10:46:25 +0000 (10:46 +0000)
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
gcc/config/sh/sh.c
gcc/config/sh/sh.opt
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/sh/pr61996.c [new file with mode: 0644]

index d0ae1f8..703a489 100644 (file)
@@ -1,3 +1,12 @@
+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.
index 13eb714..0f286bc 100644 (file)
@@ -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"))
index 1834c6b..bb6d395 100644 (file)
@@ -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
index 8343783..7debd6b 100644 (file)
@@ -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}
index e04f5b3..82e1047 100644 (file)
@@ -1,3 +1,8 @@
+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.
diff --git a/gcc/testsuite/gcc.target/sh/pr61996.c b/gcc/testsuite/gcc.target/sh/pr61996.c
new file mode 100644 (file)
index 0000000..51a5f92
--- /dev/null
@@ -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;
+}