This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: __sdivsi3_i4i and __udivsi3_i4i called for sh2 variant.


On Tue, 2013-03-05 at 00:15 +0100, Oleg Endo wrote:
> Hi,
> 
> On Mon, 2013-03-04 at 15:55 +0900, Yoshinori Sato wrote:
> > It function called to divide operator.
> > But libgcc.a is not include it helper functions.
> > 
> > This patch is included those functions.
> > 
> > diff -ru gcc-4.7.2.org/gcc/config.gcc gcc-4.7.2/gcc/config.gcc
> > --- gcc-4.7.2.org/gcc/config.gcc	2012-09-12 18:03:54.000000000 +0900
> > +++ gcc-4.7.2/gcc/config.gcc	2013-03-03 03:12:41.000000000 +0900
> > @@ -2338,7 +2338,7 @@
> >  		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,m3e,m4 ;;
> >  		sh*-*-netbsd*)	sh_multilibs=m3,m3e,m4 ;;
> >  		*) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;;
> >  		esac
> 
> I think in this case, we might at well add SH2A to the multilib list.
> 
> > diff -ru gcc-4.7.2.org/libgcc/config/sh/lib1funcs.S gcc-4.7.2/libgcc/config/sh/lib1funcs.S
> > --- gcc-4.7.2.org/libgcc/config/sh/lib1funcs.S	2011-11-03 00:03:19.000000000 +0900
> > +++ gcc-4.7.2/libgcc/config/sh/lib1funcs.S	2013-03-03 03:29:32.000000000 +0900
> > @@ -3255,8 +3255,8 @@
> >  	.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 (__sh2__) || 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.  */
> >  
> >  /* Signed / unsigned division without use of FPU, optimized for SH4.
> >     Uses a lookup table for divisors in the range -128 .. +128, and
> 
> The code that you have enabled in lib1funcs.S will utilize dynamic shift
> instructions, which are not available on SH1 or SH2.  Maybe your target
> HW is SH2A which has dynamic shift instructions and you haven't noticed
> a problem?
> Adding __SH2A__ instead of __SH2__ should be fine though.
> 
> If I'm not mistaken, the __sdivsi3_i4i and __udivsi3_i4i division
> functions will be used by the compiler if the -mdiv=call-table option is
> used.  The compiler should reject 'call-table' for SH targets that don't
> have dynamic shifts ... in sh.c there is a check...
> 
>       else if (! strcmp (sh_div_str, "call-table") && TARGET_SH2)
> 	sh_div_strategy = SH_DIV_CALL_TABLE;
> 
> ... which is not quite complete.
> I will prepare a patch for this.
> 

...and before that, open a new PR 56529.

Cheers,
Oleg


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]