]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcc/
authorolegendo <olegendo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 24 Aug 2014 10:46:25 +0000 (10:46 +0000)
committerolegendo <olegendo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 24 Aug 2014 10:46:25 +0000 (10:46 +0000)
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.

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

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 d0ae1f83a0bb4ebf7cbd93549a4c2564aebe280c..703a48970f62b4c43df1dedc7d939363874e4bbd 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 13eb714750c48b3fea29ad91b1ad7ddcd0e3108a..0f286bce20b79ef065e7efede06ab116f5aed50a 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 1834c6bde976ad5427150e851b1ee53e6979b96e..bb6d39581355ef553b577a19c47a85853109003f 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 83437830d509f2b31a802a454625c4088e61c7da..7debd6bdbe4448927c4d8ae459e15505e4d1447d 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 e04f5b34e7c72e3fe8173f16bf554d12ef1aa7cb..82e10478dd3ddf56c2b4a028c395c432926fbc66 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;
+}