Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Jan 2009 23:56:59 -0600
From:      Scot Hetzel <swhetzel@gmail.com>
To:        freebsd-emulation@freebsd.org, Juergen Lock <nox@jelal.kn-bremen.de>
Subject:   QEMU: obsolete functions in libmath
Message-ID:  <790a9fff0901212156j5e069c90h80945ab79774c784@mail.gmail.com>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
When compiling QEMU, I noticed that fabsl, remainderl, sqrtl, rintl,
lrintl, llrintl were being redefined in fpu/softfloat-native.h.
Looking for the source of this problem, I found that -CURRENT has
these defined in /usr/include/math.h and that these functions have
been implemented in FreeBSD's libm, which made them obsolete in the
../bsd/libmath.a.

Currently, there are two remaining functions that haven't been
implemented (logl and powl).

I have also notice that these patches could be removed, as they are
for FreeBSD 4.x only:

patch-fpu-softfloat-native.c
patch-libmath4

Attached is the patch which will determine what to include in libmath
for FreeBSD 5, 6, 7, and 8.

Scot

[-- Attachment #2 --]
diff -ru qemu.orig/bsd/Makefile qemu/bsd/Makefile
--- qemu.orig/bsd/Makefile	2009-01-19 23:30:09.124413041 -0600
+++ qemu/bsd/Makefile	2009-01-19 23:40:20.180704580 -0600
@@ -1,23 +1,90 @@
-SRCS=	${MACHINE_ARCH}/e_atan2l.c 	\
-	${MACHINE_ARCH}/e_logl.S	\
-	${MACHINE_ARCH}/e_powl.S	\
-	${MACHINE_ARCH}/e_remainderl.S	\
-	${MACHINE_ARCH}/e_sqrtl.c	\
-	${MACHINE_ARCH}/s_ceill.S	\
-	${MACHINE_ARCH}/s_cosl.S	\
-	${MACHINE_ARCH}/s_floorl.S	\
-	${MACHINE_ARCH}/s_isnormal.c	\
-	${MACHINE_ARCH}/s_llrint.S	\
-	${MACHINE_ARCH}/s_llrintf.S	\
-	${MACHINE_ARCH}/s_llrintl.S	\
-	${MACHINE_ARCH}/s_lrint.S	\
-	${MACHINE_ARCH}/s_lrintf.S	\
-	${MACHINE_ARCH}/s_lrintl.S	\
-	${MACHINE_ARCH}/s_rintl.c	\
-	${MACHINE_ARCH}/s_round.c	\
-	${MACHINE_ARCH}/s_sinl.S	\
-	${MACHINE_ARCH}/s_tanl.S	\
-	${MACHINE_ARCH}/s_ldexpl.c
+AWK=	/usr/bin/awk
+SYSCTL=	/sbin/sysctl
+
+.if !defined(OSVERSION)
+.if exists(/usr/include/sys/param.h)
+OSVERSION!=	${AWK} '/^\#define[[:blank:]]__FreeBSD_version/ {print $$3}' < /usr/include/sys/param.h
+.elif exists(/usr/src/sys/sys/param.h)
+OSVERSION!=	${AWK} '/^\#define[[:blank::]]__FreeBSD_version/ {print $$3}' < /usr/src/sys/sys/param.h
+.else
+OSVERSION!=	${SYSCTL} -n kern.osreldate
+.endif
+.endif
+
+# Need to be implemented
+_logl=		${MACHINE_ARCH}/e_logl.S
+_powl=		${MACHINE_ARCH}/e_powl.S
+
+# Implemented in -CURRENT
+.if ${OSVERSION} < 800042
+_atan2l=	${MACHINE_ARCH}/e_atan2l.c
+.endif
+
+.if ${OSVERSION} < 800030
+_remainderl=	${MACHINE_ARCH}/e_remainderl.S
+.endif
+
+.if ${OSVERSION} < 800025
+_sqrtl=		${MACHINE_ARCH}/e_sqrtl.c
+.endif
+
+.if ${OSVERSION} < 800022
+_cosl=		${MACHINE_ARCH}/s_cosl.S
+_sinl=		${MACHINE_ARCH}/s_sinl.S
+_tanl=		${MACHINE_ARCH}/s_tanl.S
+.endif
+
+.if ${OSVERSION} < 800012
+_lrintl=	${MACHINE_ARCH}/s_lrintl.S
+_llrintl=	${MACHINE_ARCH}/s_llrintl.S
+_rintl=		${MACHINE_ARCH}/s_rintl.c
+.endif
+
+.if ${OSVERSION} < 600020
+_ldexpl=	${MACHINE_ARCH}/s_ldexpl.c
+.endif
+
+.if ${OSVERSION} < 600008
+_ceill=		${MACHINE_ARCH}/s_ceill.S
+_floorl=	${MACHINE_ARCH}/s_floorl.S
+_llrint=	${MACHINE_ARCH}/s_llrint.S
+_llrintf=	${MACHINE_ARCH}/s_llrintf.S
+_lrint=		${MACHINE_ARCH}/s_lrint.S
+_lrintf=	${MACHINE_ARCH}/s_lrintf.S
+.endif
+
+.if ${OSVERSION} < 502121
+_isnormal=	${MACHINE_ARCH}/s_isnormal.c
+.endif
+
+.if ${OSVERSION} < 502114
+_round=		${MACHINE_ARCH}/s_round.c
+.endif
+
+#.if ${OSVERSION} < 501113
+#_fabsl=		${MACHINE_ARCH}/e_fabsl.c
+#.endif
+
+SRCS=	${_atan2l} 	\
+	${_logl}	\
+	${_powl}	\
+	${_remainderl}	\
+	${_sqrtl}	\
+	${_ceill}	\
+	${_cosl}	\
+	${_floorl}	\
+	${_isnormal}	\
+	${_llrint}	\
+	${_llrintf}	\
+	${_llrintl}	\
+	${_lrint}	\
+	${_lrintf}	\
+	${_lrintl}	\
+	${_rintl}	\
+	${_round}	\
+	${_sinl}	\
+	${_tanl}	\
+	${_ldexpl}
 
 OBJS=	${SRCS:R:S/$/.o/}
 
diff -ru qemu.orig/fpu/softfloat-native.h qemu/fpu/softfloat-native.h
--- qemu.orig/fpu/softfloat-native.h	2009-01-19 23:30:08.833416100 -0600
+++ qemu/fpu/softfloat-native.h	2009-01-19 23:28:08.682949000 -0600
@@ -1,15 +1,26 @@
+#ifndef SOFTFLOAT_NATIVE_H
+#define SOFTFLOAT_NATIVE_H
+
 /* Native implementation of soft float functions */
 #include <math.h>
 
 #ifdef __FreeBSD__
 #include <osreldate.h>
+#if __FreeBSD_version < 501113
 long double fabsl(long double x);
+#endif
+#if __FreeBSD_version < 800030
 long double remainderl(long double x, long double y);
+#endif
+#if __FreeBSD_version < 800025
 long double sqrtl(long double x);
+#endif
+#if __FreeBSD_version < 800012
 long double rintl(long double x);
 long lrintl(long double x);
 long long llrintl(long double x);
 #endif
+#endif
 
 #if (defined(_BSD) && !defined(__APPLE__) && \
      (!defined(__FreeBSD__) || __FreeBSD_version < 500000)) || \
@@ -516,3 +527,5 @@
 }
 
 #endif
+
+#endif /* SOFTFLOAT_NATIVE_H */

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?790a9fff0901212156j5e069c90h80945ab79774c784>