Optimize powerpc*-*-linux* e500 hardfp/soft-fp use.
commitd9b5cf5c6513fc0a93a5f96418f50d17ffbc2c35
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Oct 2014 12:59:16 +0000 (29 12:59 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Oct 2014 12:59:16 +0000 (29 12:59 +0000)
tree91b9b1fdd164936c1a8965d6660a54367fea74d0
parent3754d04677134616a06eabd18d3f4476e5f5ec23
Optimize powerpc*-*-linux* e500 hardfp/soft-fp use.

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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216835 138bc75d-0d04-0410-961f-82ee72b054a4
libgcc/ChangeLog
libgcc/config.host
libgcc/config/rs6000/t-e500v1-fp [new file with mode: 0644]
libgcc/config/rs6000/t-e500v2-fp [new file with mode: 0644]
libgcc/config/t-hardfp
libgcc/config/t-softfp