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