svn commit: r233753 - in projects/arm_eabi: contrib/compiler-rt/lib lib/libc lib/libc/arm lib/libc/arm/aeabi lib/libc/arm/gen lib/libcompiler_rt

Andrew Turner andrew at FreeBSD.org
Sun Apr 1 06:31:58 UTC 2012


Author: andrew
Date: Sun Apr  1 06:31:57 2012
New Revision: 233753
URL: http://svn.freebsd.org/changeset/base/233753

Log:
  Revert to the libc softfloat. Other parts of libc depend on it.

Added:
  projects/arm_eabi/lib/libc/arm/aeabi/aeabi_double.c
  projects/arm_eabi/lib/libc/arm/aeabi/aeabi_float.c
Modified:
  projects/arm_eabi/contrib/compiler-rt/lib/comparedf2.c
  projects/arm_eabi/contrib/compiler-rt/lib/comparesf2.c
  projects/arm_eabi/lib/libc/Makefile
  projects/arm_eabi/lib/libc/arm/Symbol.map
  projects/arm_eabi/lib/libc/arm/Symbol_oabi.map
  projects/arm_eabi/lib/libc/arm/aeabi/Makefile.inc
  projects/arm_eabi/lib/libc/arm/aeabi/Symbol.map
  projects/arm_eabi/lib/libc/arm/gen/flt_rounds.c
  projects/arm_eabi/lib/libcompiler_rt/Makefile

Modified: projects/arm_eabi/contrib/compiler-rt/lib/comparedf2.c
==============================================================================
--- projects/arm_eabi/contrib/compiler-rt/lib/comparedf2.c	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/contrib/compiler-rt/lib/comparedf2.c	Sun Apr  1 06:31:57 2012	(r233753)
@@ -130,31 +130,3 @@ enum GE_RESULT __gtdf2(fp_t a, fp_t b) {
     return __gedf2(a, b);
 }
 
-#ifdef __ARM_EABI__
-// The following are required for the ARM EABI.
-
-int __aeabi_dcmpeq(fp_t a, fp_t b) {
-    return __ledf2(a, b) == 0;
-}
-
-int __aeabi_dcmplt(fp_t a, fp_t b) {
-    return __ledf2(a, b) < 0;
-}
-
-int __aeabi_dcmple(fp_t a, fp_t b) {
-    return __ledf2(a, b) <= 0;
-}
-
-int __aeabi_dcmpge(fp_t a, fp_t b) {
-    return __gedf2(a, b) >= 0;
-}
-
-int __aeabi_dcmpgt(fp_t a, fp_t b) {
-    return __gedf2(a, b) > 0;
-}
-
-int __aeabi_dcmpun(fp_t a, fp_t b) {
-    return __unorddf2(a, b);
-}
-#endif
-

Modified: projects/arm_eabi/contrib/compiler-rt/lib/comparesf2.c
==============================================================================
--- projects/arm_eabi/contrib/compiler-rt/lib/comparesf2.c	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/contrib/compiler-rt/lib/comparesf2.c	Sun Apr  1 06:31:57 2012	(r233753)
@@ -129,32 +129,3 @@ enum LE_RESULT __nesf2(fp_t a, fp_t b) {
 enum GE_RESULT __gtsf2(fp_t a, fp_t b) {
     return __gesf2(a, b);
 }
-
-#ifdef __ARM_EABI__
-// The following are required for the ARM EABI.
-
-int __aeabi_fcmpeq(fp_t a, fp_t b) {
-    return __lesf2(a, b) == 0;
-}
-
-int __aeabi_fcmplt(fp_t a, fp_t b) {
-    return __lesf2(a, b) < 0;
-}
-
-int __aeabi_fcmple(fp_t a, fp_t b) {
-    return __lesf2(a, b) <= 0;
-}
-
-int __aeabi_fcmpge(fp_t a, fp_t b) {
-    return __gesf2(a, b) >= 0;
-}
-
-int __aeabi_fcmpgt(fp_t a, fp_t b) {
-    return __gesf2(a, b) > 0;
-}
-
-int __aeabi_fcmpun(fp_t a, fp_t b) {
-    return __unordsf2(a, b);
-}
-#endif
-

Modified: projects/arm_eabi/lib/libc/Makefile
==============================================================================
--- projects/arm_eabi/lib/libc/Makefile	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/lib/libc/Makefile	Sun Apr  1 06:31:57 2012	(r233753)
@@ -85,7 +85,7 @@ NOASM=
 .include "${.CURDIR}/rpc/Makefile.inc"
 .include "${.CURDIR}/uuid/Makefile.inc"
 .include "${.CURDIR}/xdr/Makefile.inc"
-.if ${LIBC_ARCH} == "mips"
+.if ${LIBC_ARCH} == "arm" || ${LIBC_ARCH} == "mips"
 .include "${.CURDIR}/softfloat/Makefile.inc"
 .endif
 .if ${MK_NIS} != "no"

Modified: projects/arm_eabi/lib/libc/arm/Symbol.map
==============================================================================
--- projects/arm_eabi/lib/libc/arm/Symbol.map	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/lib/libc/arm/Symbol.map	Sun Apr  1 06:31:57 2012	(r233753)
@@ -54,4 +54,22 @@ FBSDprivate_1.0 {
 	curbrk;
 	minbrk;
 	_sbrk;
+
+	/* softfloat */
+	__addsf3;
+	__adddf3;
+	__subsf3;
+	__subdf3;
+	__mulsf3;
+	__muldf3;
+	__divsf3;
+	__divdf3;
+	__floatsisf;
+	__floatsidf;
+	__fixsfsi;
+	__fixdfsi;
+	__fixunssfsi;
+	__fixunsdfsi;
+	__extendsfdf2;
+	__truncdfsf2;
 };

Modified: projects/arm_eabi/lib/libc/arm/Symbol_oabi.map
==============================================================================
--- projects/arm_eabi/lib/libc/arm/Symbol_oabi.map	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/lib/libc/arm/Symbol_oabi.map	Sun Apr  1 06:31:57 2012	(r233753)
@@ -13,22 +13,4 @@ FBSDprivate_1.0 {
 	__modsi3;
 	__udivsi3;
 	__divsi3;
-
-	/* softfloat */
-	__addsf3;
-	__adddf3;
-	__subsf3;
-	__subdf3;
-	__mulsf3;
-	__muldf3;
-	__divsf3;
-	__divdf3;
-	__floatsisf;
-	__floatsidf;
-	__fixsfsi;
-	__fixdfsi;
-	__fixunssfsi;
-	__fixunsdfsi;
-	__extendsfdf2;
-	__truncdfsf2;
 };

Modified: projects/arm_eabi/lib/libc/arm/aeabi/Makefile.inc
==============================================================================
--- projects/arm_eabi/lib/libc/arm/aeabi/Makefile.inc	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/lib/libc/arm/aeabi/Makefile.inc	Sun Apr  1 06:31:57 2012	(r233753)
@@ -3,6 +3,8 @@
 .PATH: ${.CURDIR}/arm/aeabi
 
 SRCS+=	aeabi_atexit.c		\
+	aeabi_double.c		\
+	aeabi_float.c		\
 	aeabi_unwind_cpp.c
 
 SYM_MAPS+=${.CURDIR}/arm/aeabi/Symbol.map

Modified: projects/arm_eabi/lib/libc/arm/aeabi/Symbol.map
==============================================================================
--- projects/arm_eabi/lib/libc/arm/aeabi/Symbol.map	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/lib/libc/arm/aeabi/Symbol.map	Sun Apr  1 06:31:57 2012	(r233753)
@@ -3,10 +3,45 @@
  */
 
 /*
- * This only needs to contain symbols that are not listed in
+ * This only needs to contain AEABI symbols that are not listed in
  * symbol maps from other parts of libc (i.e., not found in
  * stdlib/Symbol.map, string/Symbol.map, sys/Symbol.map, ...).
  */
 FBSDprivate_1.0 {
 	__aeabi_atexit;
+
+	__aeabi_dcmpeq;
+	__aeabi_dcmplt;
+	__aeabi_dcmple;
+	__aeabi_dcmpge;
+	__aeabi_dcmpgt;
+	__aeabi_dcmpun;
+
+	__aeabi_d2iz;
+	__aeabi_d2f;
+
+	__aeabi_dadd;
+	__aeabi_ddiv;
+	__aeabi_dmul;
+	__aeabi_dsub;
+
+
+	__aeabi_fcmpeq;
+	__aeabi_fcmplt;
+	__aeabi_fcmple;
+	__aeabi_fcmpge;
+	__aeabi_fcmpgt;
+	__aeabi_fcmpun;
+
+	__aeabi_f2iz;
+	__aeabi_f2d;
+
+	__aeabi_fadd;
+	__aeabi_fdiv;
+	__aeabi_fmul;
+	__aeabi_fsub;
+
+
+	__aeabi_i2d;
+	__aeabi_i2f;
 };

Added: projects/arm_eabi/lib/libc/arm/aeabi/aeabi_double.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm_eabi/lib/libc/arm/aeabi/aeabi_double.c	Sun Apr  1 06:31:57 2012	(r233753)
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2012 Andrew Turner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+float64 __adddf3(float64 a, float64 b);
+float64 __divdf3(float64 a, float64 b);
+float64 __muldf3(float64 a, float64 b);
+float64 __subdf3(float64 a, float64 b);
+
+float32 __truncdfsf2(float64 a);
+
+int32 __fixdfsi(float64);
+float64 __floatsidf(int32 a);
+flag __gedf2(float64, float64);
+flag __ledf2(float64, float64);
+flag __unorddf2(float64, float64);
+
+int __aeabi_dcmpeq(double a, double b)
+{
+	return __ledf2(a, b) == 0;
+}
+
+int __aeabi_dcmplt(double a, double b)
+{
+	return __ledf2(a, b) < 0;
+}
+
+int __aeabi_dcmple(double a, double b)
+{
+	return __ledf2(a, b) <= 0;
+}
+
+int __aeabi_dcmpge(double a, double b)
+{
+	return __gedf2(a, b) >= 0;
+}
+
+int __aeabi_dcmpgt(double a, double b)
+{
+	return __gedf2(a, b) > 0;
+}
+
+int __aeabi_dcmpun(double a, double b)
+{
+	return __unorddf2(a, b);
+}
+
+int __aeabi_d2iz(double a)
+{
+	return __fixdfsi(a);
+}
+
+float __aeabi_d2f(double a)
+{
+	return __truncdfsf2(a);
+}
+
+double __aeabi_i2d(int a)
+{
+	return __floatsidf(a);
+}
+
+double __aeabi_dadd(double a, double b)
+{
+	return __adddf3(a, b);
+}
+
+double __aeabi_ddiv(double a, double b)
+{
+	return __divdf3(a, b);
+}
+
+double __aeabi_dmul(double a, double b)
+{
+	return __muldf3(a, b);
+}
+
+double __aeabi_dsub(double a, double b)
+{
+	return __subdf3(a, b);
+}
+

Added: projects/arm_eabi/lib/libc/arm/aeabi/aeabi_float.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm_eabi/lib/libc/arm/aeabi/aeabi_float.c	Sun Apr  1 06:31:57 2012	(r233753)
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2012 Andrew Turner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+float32 __addsf3(float32 a, float32 b);
+float32 __divsf3(float32 a, float32 b);
+float32 __mulsf3(float32 a, float32 b);
+float32 __subsf3(float32 a, float32 b);
+
+float64 __extendsfdf2(float32 a);
+
+int32 __fixsfsi(float32);
+float32 __floatsisf(int32 a);
+flag __gesf2(float32, float32);
+flag __lesf2(float32, float32);
+flag __unordsf2(float32, float32);
+
+int __aeabi_fcmpeq(float a, float b)
+{
+	return __lesf2(a, b) == 0;
+}
+
+int __aeabi_fcmplt(float a, float b)
+{
+	return __lesf2(a, b) < 0;
+}
+
+int __aeabi_fcmple(float a, float b)
+{
+	return __lesf2(a, b) <= 0;
+}
+
+int __aeabi_fcmpge(float a, float b)
+{
+	return __gesf2(a, b) >= 0;
+}
+
+int __aeabi_fcmpgt(float a, float b)
+{
+	return __gesf2(a, b) > 0;
+}
+
+int __aeabi_fcmpun(float a, float b)
+{
+	return __unordsf2(a, b);
+}
+
+int __aeabi_f2iz(float a)
+{
+	return __fixsfsi(a);
+}
+
+double __aeabi_f2d(float a)
+{
+	return __extendsfdf2(a);
+}
+
+float __aeabi_i2f(int a)
+{
+	return __floatsisf(a);
+}
+
+float __aeabi_fadd(float a, float b)
+{
+	return __addsf3(a, b);
+}
+
+float __aeabi_fdiv(float a, float b)
+{
+	return __divsf3(a, b);
+}
+
+float __aeabi_fmul(float a, float b)
+{
+	return __mulsf3(a, b);
+}
+
+float __aeabi_fsub(float a, float b)
+{
+	return __subsf3(a, b);
+}
+

Modified: projects/arm_eabi/lib/libc/arm/gen/flt_rounds.c
==============================================================================
--- projects/arm_eabi/lib/libc/arm/gen/flt_rounds.c	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/lib/libc/arm/gen/flt_rounds.c	Sun Apr  1 06:31:57 2012	(r233753)
@@ -30,22 +30,15 @@ __FBSDID("$FreeBSD$");
 #include <fenv.h>
 #include <float.h>
 
-#ifndef __ARM_EABI__
 #include "softfloat-for-gcc.h"
 #include "milieu.h"
 #include "softfloat.h"
-#endif
 
 int
 __flt_rounds(void)
 {
 
-#ifdef __ARM_EABI__
-	/*
-	 * We use compiler-rt which uses round to nearest.
-	 */
-	return (1);
-#elif !defined(ARM_HARD_FLOAT)
+#ifndef ARM_HARD_FLOAT
 	/*
 	 * Translate our rounding modes to the unnamed
 	 * manifest constants required by C99 et. al.

Modified: projects/arm_eabi/lib/libcompiler_rt/Makefile
==============================================================================
--- projects/arm_eabi/lib/libcompiler_rt/Makefile	Sun Apr  1 01:14:05 2012	(r233752)
+++ projects/arm_eabi/lib/libcompiler_rt/Makefile	Sun Apr  1 06:31:57 2012	(r233753)
@@ -127,23 +127,26 @@ SRCF=	absvdi2 \
 	umodti3
 
 # These are already shipped by libc.a on arm and mips
-.if ${MACHINE_CPUARCH} != "mips"
+.if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips"
 SRCF+=	adddf3 \
 	addsf3 \
 	divdf3 \
 	divsf3 \
-	divsi3 \
 	extendsfdf2 \
 	fixdfsi \
 	fixsfsi \
 	floatsidf \
 	floatsisf \
-	modsi3 \
 	muldf3 \
 	mulsf3 \
 	subdf3 \
 	subsf3 \
-	truncdfsf2 \
+	truncdfsf2
+.endif
+
+.if ${MACHINE_CPUARCH} != "mips"
+SRCF+=	divsi3 \
+	modsi3 \
 	udivsi3 \
 	umodsi3
 .endif


More information about the svn-src-projects mailing list