diff options
-rw-r--r-- | libgcc/ChangeLog | 9 | ||||
-rw-r--r-- | libgcc/config.host | 18 | ||||
-rw-r--r-- | libgcc/configure | 23 | ||||
-rw-r--r-- | libgcc/configure.ac | 23 |
4 files changed, 71 insertions, 2 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 14b0e364b31..d1a3b7394da 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,12 @@ +2014-10-25 Joseph Myers <joseph@codesourcery.com> + + * configure.ac (ppc_fp_type): Set variable on powerpc*-*-linux*. + * configure: Regenerate. + * config.host (powerpc*-*-linux*): Use $ppc_fp_type to determine + additions to tmake_file. Use t-hardfp-sfdf and t-hardfp instead + of soft-fp for 32-bit classic hard float. Do not use + t-softfp-excl for soft float. + 2014-10-22 Joseph Myers <joseph@codesourcery.com> * config.host (powerpc*-*-linux*): Only use soft-fp for 32-bit diff --git a/libgcc/config.host b/libgcc/config.host index 10c25f5384f..d6c7df73bbf 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -991,9 +991,23 @@ powerpc-*-rtems*) ;; powerpc*-*-linux*) tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-savresfgpr rs6000/t-crtstuff rs6000/t-linux t-dfprules rs6000/t-ppc64-fp t-slibgcc-libgcc" - if test "${host_address}" = 32; then + case $ppc_fp_type in + 64) + ;; + hard) + tmake_file="${tmake_file} t-hardfp-sfdf t-hardfp" + ;; + soft) + tmake_file="${tmake_file} t-softfp-sfdf t-softfp" + ;; + e500v1|e500v2) tmake_file="${tmake_file} t-softfp-sfdf t-softfp-excl t-softfp" - fi + ;; + *) + echo "Unknown ppc_fp_type $ppc_fp_type" 1>&2 + exit 1 + ;; + esac extra_parts="$extra_parts ecrti.o ecrtn.o ncrti.o ncrtn.o" md_unwind_header=rs6000/linux-unwind.h ;; diff --git a/libgcc/configure b/libgcc/configure index 19c4ed69b19..7a154db9de9 100644 --- a/libgcc/configure +++ b/libgcc/configure @@ -4376,6 +4376,29 @@ fi $as_echo "$libgcc_cv_mips_hard_float" >&6; } esac +# Determine floating-point type for powerpc*-*-linux*. +# Single-precision-only FPRs are not a supported configuration for +# this target, so are not allowed for in this test. +case ${host} in +powerpc*-*-linux*) + cat > conftest.c <<EOF +#ifdef __powerpc64__ +ppc_fp_type=64 +#elif defined _SOFT_FLOAT +ppc_fp_type=soft +#elif defined _SOFT_DOUBLE +ppc_fp_type=e500v1 +#elif defined __NO_FPRS__ +ppc_fp_type=e500v2 +#else +ppc_fp_type=hard +#endif +EOF +eval `${CC-cc} -E conftest.c | grep ppc_fp_type=` +rm -f conftest.c +;; +esac + # Collect host-machine-specific information. . ${srcdir}/config.host diff --git a/libgcc/configure.ac b/libgcc/configure.ac index 72a21a97e79..710f15a8279 100644 --- a/libgcc/configure.ac +++ b/libgcc/configure.ac @@ -320,6 +320,29 @@ mips*-*-*) [libgcc_cv_mips_hard_float=no])]) esac +# Determine floating-point type for powerpc*-*-linux*. +# Single-precision-only FPRs are not a supported configuration for +# this target, so are not allowed for in this test. +case ${host} in +powerpc*-*-linux*) + cat > conftest.c <<EOF +#ifdef __powerpc64__ +ppc_fp_type=64 +#elif defined _SOFT_FLOAT +ppc_fp_type=soft +#elif defined _SOFT_DOUBLE +ppc_fp_type=e500v1 +#elif defined __NO_FPRS__ +ppc_fp_type=e500v2 +#else +ppc_fp_type=hard +#endif +EOF +eval `${CC-cc} -E conftest.c | grep ppc_fp_type=` +rm -f conftest.c +;; +esac + # Collect host-machine-specific information. . ${srcdir}/config.host |