Optimize powerpc*-*-linux* e500 hardfp/soft-fp use

Programming / Compilers / GCC - jsm28 [138bc75d-0d04-0410-961f-82ee72b054a4] - 29 October 2014 07:59 UTC

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.

- 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.

d9b5cf5 Optimize powerpc*-*-linux* e500 hardfp/soft-fp use.
libgcc/ChangeLog | 14 ++++++++++++++
libgcc/config.host | 7 +++++--
libgcc/config/rs6000/t-e500v1-fp | 32 ++++++++++++++++++++++++++++++++
libgcc/config/rs6000/t-e500v2-fp | 26 ++++++++++++++++++++++++++
libgcc/config/t-hardfp | 9 +++++++++
libgcc/config/t-softfp | 7 ++++++-
6 files changed, 92 insertions(+), 3 deletions(-)

Upstream: gcc.gnu.org


  • Share