summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libgcc/ChangeLog9
-rw-r--r--libgcc/config.host18
-rw-r--r--libgcc/configure23
-rw-r--r--libgcc/configure.ac23
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