]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/56529 ([SH] Calls to __sdivsi3_i4i and __udivsi3_i4i are generated on...
authorOleg Endo <olegendo@gcc.gnu.org>
Wed, 6 Mar 2013 00:41:25 +0000 (00:41 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Wed, 6 Mar 2013 00:41:25 +0000 (00:41 +0000)
PR target/56529
* config/sh/sh.c (sh_option_override): Check for TARGET_DYNSHIFT
instead of TARGET_SH2 for call-table case.  Do not set sh_div_strategy
to SH_DIV_CALL_TABLE for TARGET_SH2.
* config.gcc (sh_multilibs): Add m2 and m2a to sh*-*-linux* multilib
list.
* doc/invoke.texi (SH options): Document mdiv= call-div1, call-fp,
call-table options.

PR target/56529
* config/sh/lib1funcs.S (udivsi3_i4i, sdivsi3_i4i): Add __SH2A__ to
inclusion list.

From-SVN: r196484

gcc/ChangeLog
gcc/config.gcc
gcc/config/sh/sh.c
gcc/doc/invoke.texi
libgcc/ChangeLog
libgcc/config/sh/lib1funcs.S

index a0c6c3e9ad5959631da358e8143f9d9126a86171..f8c5f95a1bdeb3e43d51302dc6032c16a6b5d38d 100644 (file)
@@ -1,3 +1,14 @@
+2013-03-06  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/56529
+       * config/sh/sh.c (sh_option_override): Check for TARGET_DYNSHIFT
+       instead of TARGET_SH2 for call-table case.  Do not set sh_div_strategy
+       to SH_DIV_CALL_TABLE for TARGET_SH2.
+       * config.gcc (sh_multilibs): Add m2 and m2a to sh*-*-linux* multilib
+       list.
+       * doc/invoke.texi (SH options): Document mdiv= call-div1, call-fp,
+       call-table options.
+
 2013-03-05  Sterling Augustine  <saugustine@google.com>
            Cary Coutant  <ccoutant@google.com>
 
index 9255d118c5094879715cc26410106028536b2273..64302a7bb392392210c96b9e4d7fcc347d46dea1 100644 (file)
@@ -2371,7 +2371,7 @@ sh-*-elf* | sh[12346l]*-*-elf* | \
                sh[1234]*)      sh_multilibs=${sh_cpu_target} ;;
                sh64* | sh5*)   sh_multilibs=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu ;;
                sh-superh-*)    sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
-               sh*-*-linux*)   sh_multilibs=m1,m3e,m4 ;;
+               sh*-*-linux*)   sh_multilibs=m1,m2,m2a,m3e,m4 ;;
                sh*-*-netbsd*)  sh_multilibs=m3,m3e,m4 ;;
                *) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;;
                esac
index be49e46bc4d0b250fc5766fb322aafdaf60b3147..dcbd93286ed8a77efe0c2928d6d411761b2f6763 100644 (file)
@@ -820,7 +820,7 @@ sh_option_override (void)
                   || (TARGET_HARD_SH4 && TARGET_SH2E)
                   || (TARGET_SHCOMPACT && TARGET_FPU_ANY)))
        sh_div_strategy = SH_DIV_CALL_FP;
-      else if (! strcmp (sh_div_str, "call-table") && TARGET_SH2)
+      else if (! strcmp (sh_div_str, "call-table") && TARGET_DYNSHIFT)
        sh_div_strategy = SH_DIV_CALL_TABLE;
       else
        /* Pick one that makes most sense for the target in general.
@@ -840,8 +840,6 @@ sh_option_override (void)
          sh_div_strategy = SH_DIV_CALL_FP;
        /* SH1 .. SH3 cores often go into small-footprint systems, so
           default to the smallest implementation available.  */
-       else if (TARGET_SH2)    /* ??? EXPERIMENTAL */
-         sh_div_strategy = SH_DIV_CALL_TABLE;
        else
          sh_div_strategy = SH_DIV_CALL_DIV1;
     }
index a2a40660cfe25ee14dd24668eec1373d8ea593e3..11c34d8781b5605919ef4833a10eee07111308de 100644 (file)
@@ -18749,8 +18749,8 @@ Set the cost to assume for a multiply insn.
 
 @item -mdiv=@var{strategy}
 @opindex mdiv=@var{strategy}
-Set the division strategy to use for SHmedia code.  @var{strategy} must be
-one of: 
+Set the division strategy to be used for integer division operations.
+For SHmedia @var{strategy} can be one of: 
 
 @table @samp
 
@@ -18808,6 +18808,36 @@ a small dividend to be unlikely, and @samp{inv20l} assumes it to be likely.
 
 @end table
 
+For targets other than SHmedia @var{strategy} can be one of:
+
+@table @samp
+
+@item call-div1
+Calls a library function that uses the single-step division instruction
+@code{div1} to perform the operation.  Division by zero calculates an
+unspecified result and does not trap.  This is the default except for SH4,
+SH2A and SHcompact.
+
+@item call-fp
+Calls a library function that performs the operation in double precision
+floating point.  Division by zero causes a floating-point exception.  This is
+the default for SHcompact with FPU.  Specifying this for targets that do not
+have a double precision FPU will default to @code{call-div1}.
+
+@item call-table
+Calls a library function that uses a lookup table for small divisors and
+the @code{div1} instruction with case distinction for larger divisors.  Division
+by zero calculates an unspecified result and does not trap.  This is the default
+for SH4.  Specifying this for targets that do not have dynamic shift
+instructions will default to @code{call-div1}.
+
+@end table
+
+When a division strategy has not been specified the default strategy will be
+selected based on the current target.  For SH2A the default strategy is to
+use the @code{divs} and @code{divu} instructions instead of library function
+calls.
+
 @item -maccumulate-outgoing-args
 @opindex maccumulate-outgoing-args
 Reserve space once for outgoing arguments in the function prologue rather
index b0c7aafda767f432b2987fedadfcd6376fa5b2ca..8482f1fc09b80525fcf3a97c6756eb47612c888c 100644 (file)
@@ -1,3 +1,9 @@
+2013-03-06  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/56529
+       * config/sh/lib1funcs.S (udivsi3_i4i, sdivsi3_i4i): Add __SH2A__ to
+       inclusion list.
+
 2013-03-04  Edgar E. Iglesias <edgar.iglesias@gmail.com>
 
        * config/microblaze/crti.S: Setup stack protection at entry
index 86a500f6aa31c4ca745f39b3de6db03428ffdb4e..5625719042153a7c7821e6f7fb22b46d83fa6d69 100644 (file)
@@ -3288,8 +3288,8 @@ GLOBAL(div_table):
        .word   17136
        .word   16639
 
-#elif defined (__SH3__) || defined (__SH3E__) || defined (__SH4__) || defined (__SH4_SINGLE__) || defined (__SH4_SINGLE_ONLY__) || defined (__SH4_NOFPU__)
-/* This code used shld, thus is not suitable for SH1 / SH2.  */
+#elif defined (__SH2A__) || defined (__SH3__) || defined (__SH3E__) || defined (__SH4__) || defined (__SH4_SINGLE__) || defined (__SH4_SINGLE_ONLY__) || defined (__SH4_NOFPU__)
+/* This code uses shld, thus is not suitable for SH1 / SH2.  */
 
 /* Signed / unsigned division without use of FPU, optimized for SH4.
    Uses a lookup table for divisors in the range -128 .. +128, and