This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Optimize powerpc*-*-linux* e500 hardfp/soft-fp use
- From: David Edelsohn <dje dot gcc at gmail dot com>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 29 Oct 2014 08:55:42 -0400
- Subject: Re: Optimize powerpc*-*-linux* e500 hardfp/soft-fp use
- Authentication-results: sourceware.org; auth=none
- References: <Pine dot LNX dot 4 dot 64 dot 1410291252380 dot 4004 at digraph dot polyomino dot org dot uk>
On Wed, Oct 29, 2014 at 8:54 AM, Joseph S. Myers
<joseph@codesourcery.com> wrote:
> Continuing the cleanups of libgcc soft-fp configuration for
> powerpc*-*-linux* in preparation for implementing
> TARGET_ATOMIC_ASSIGN_EXPAND_FENV for soft-float and e500, this patch
> optimizes the choice of which functions to build for the e500 cases.
>
> For e500v2, use of hardfp is generally right, except that calls to
> __unordsf2 and __unorddf2 are actually generated by GCC from
> __builtin_isunordered and so they need to be implemented with soft-fp
> to avoid recursively calling themselves. For e500v1, hardfp is right
> for SFmode (except for __unordsf2) but soft-fp for DFmode (and when
> using soft-fp, as usual it's best for the conversions between DFmode
> and integers all to come directly from soft-fp rather than some coming
> from libgcc2.c). Thus, new variables hardfp_exclusions and
> softfp_extras are added that configurations using t-hardfp and
> t-softfp can use to achieve the desired effect of selectively mixing
> the two sources of functions.
>
> Tested with no regressions for crosses to powerpc-linux-gnuspe (both
> e500v1 and e500v2); also checked that the same set of symbols and
> versions is exported from shared libgcc before and after the patch.
> OK to commit?
>
> 2014-10-29 Joseph Myers <joseph@codesourcery.com>
>
> * config/t-hardfp (hardfp_exclusions): Document new variable for
> user to define.
> (hardfp_func_list): Exclude functions from $(hardfp_exclusions).
> * config/t-softfp (softfp_extras): Document new variable for user
> to define.
> (softfp_func_list): Add functions from $(softfp_extras).
> * config/rs6000/t-e500v1-fp, config/rs6000/t-e500v2-fp: New files.
> * config.host (powerpc*-*-linux*): For e500v1, use
> rs6000/t-e500v1-fp and t-hardfp; do not use t-softfp-sfdf and
> t-softfp-excl. For e500v2, use t-hardfp-sfdf, rs6000/t-e500v2-fp
> and t-hardfp; do not use t-softfp-sfdf and t-softfp-excl.
Okay.
Thanks, David