Bug 80486 - update emulators/qemu to 0.7.0
Summary: update emulators/qemu to 0.7.0
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-ports-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-04-30 20:00 UTC by Juergen Lock
Modified: 2005-05-01 08:39 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Juergen Lock 2005-04-30 20:00:21 UTC
	- amd64 hosts should finally work with the port
	- remove hard samba dependency

fpu fixes (Jocelyn Mayer) - soft float support, NaN support in FPU
comparisons, sparc update (Blue Swirl), Open Hack'Ware version 0.4.1,
new bochs BIOS - 16 bit APM support (initial patch by Struan Bartlett),
packet fix for for netware 3.11 (initial patch by Mark Jonckheere) -
security bug fix, cirrus fixes (Volker Ruppert), more amd64 aka x86_64
guest fixes, i386 guest fixes, ppc fixes + little-endian mode
(Jocelyn Mayer), sparc MMU fixes (Blue Swirl), sdlaudio debug fix,
depth=24 write mask fix (Volker Ruppert), proll update: IDE HDD/CD support
(Blue Swirl), VMDK4 write support - fixed packing of VMDK4Header
(Filip Navara), fixed gdb error reporting (Paul Brook), Bochs disk image
support (Alex Beregszaszi)

Fix: removed files: files/patch-ab, files/patch-block.c,
	files/patch-target-sparc::op_helper.c



--Boundary-00=_M6dcCGxTk+H4CWI----BGJLyQSQ7MB2MN8Yq8Lbil4VQI4wV15IGcoxig7M34bBJgZW
Content-Type: text/plain; name="file.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="file.diff"

Index: Makefile
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/Makefile,v
retrieving revision 1.22
diff -u -r1.22 Makefile
--- Makefile	8 Mar 2005 23:02:58 -0000	1.22
+++ Makefile	30 Apr 2005 18:11:57 -0000
@@ -6,42 +6,57 @@
 #
 
 PORTNAME=	qemu
-PORTVERSION=	0.6.2s.20050305
+PORTVERSION=	0.7.0
 CATEGORIES=	emulators
-MASTER_SITES=	http://people.fruitsalad.org/nox/qemu/ \
-		http://dad-answers.com/qemu/
-DISTNAME=	${PORTNAME}-snapshot-2005-03-05_23
+MASTER_SITES=	http://www.qemu.org/
 
 MAINTAINER=	nox@jelal.kn-bremen.de
 COMMENT=	QEMU CPU Emulator
 
 BUILD_DEPENDS+=	texi2html:${PORTSDIR}/textproc/texi2html
+.if defined(WITH_SAMBA)
 RUN_DEPENDS+=	${LOCALBASE}/sbin/smbd:${PORTSDIR}/net/samba
+.endif
 
 HAS_CONFIGURE=	yes
-USE_BZIP2=	yes
 USE_GMAKE=	yes
 USE_GETOPT_LONG=	yes
 USE_SDL=	sdl
 USE_PERL5=	yes
 PATCH_STRIP=	-p1
-CONFIGURE_ARGS+=	--prefix=${PREFIX} --cc=${CC}\ -I${PREFIX}/include
+CONFIGURE_ARGS+=	--prefix=${PREFIX} --cc=${CC}
+MAKE_ENV+=	BSD_MAKE=${MAKE}
 MAN1=		qemu.1 qemu-img.1
-ONLY_FOR_ARCHS=	i386 amd64 powerpc
+ONLY_FOR_ARCHS=	amd64 i386
 
 # gcc34 (system cc on 5.x now) has problems with qemu on amd64
 # (doesnt build target-i386/op.c), try the one in ports which is newer
 .include <bsd.port.pre.mk>
 
-.if ${ARCH} == "amd64" && ${OSVERSION} >= 502126
-BROKEN=		Does not compile
-CC=		gcc34
-CXX=		g++34
+.if ${ARCH} == "amd64"
+ARCH=		x86_64
+.if ${OSVERSION} >= 502126
 BUILD_DEPENDS+=	gcc34:${PORTSDIR}/lang/gcc34
 GCCVERSION=	030402
+CC=		gcc34
 .else
 USE_GCC=	3.4
 .endif
+.else
+USE_GCC=	3.4
+.endif
+
+pre-everything::
+.if !defined(WITH_SAMBA) && !exists(${LOCALBASE}/sbin/smbd)
+	@${ECHO_MSG} "Notice: if you need qemu's -smb option (smb-export local dir to guest)"
+	@${ECHO_MSG} "then you also need samba, you can have this port install it by defining"
+	@${ECHO_MSG} "WITH_SAMBA."
+.endif
+
+pre-patch:
+	@for A in ${ONLY_FOR_ARCHS}; do \
+		${MKDIR} ${WRKSRC}/bsd/$$A; \
+	done
 
 post-install:
 	@${CAT} ${PKGMESSAGE}
Index: pkg-message
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/pkg-message,v
retrieving revision 1.7
diff -u -r1.7 pkg-message
--- pkg-message	8 Jan 2005 16:21:01 -0000	1.7
+++ pkg-message	30 Apr 2005 18:05:53 -0000
@@ -16,4 +16,6 @@
 (not included since it needs a patch to emulators/rtc.)
 - using physical media doesn't work on 4.x hosts (missing DIOCGMEDIASIZE
 ioctl.)
+- the -smb option (smb-export local dir to guest) needs the net/samba
+port/package installed in addition to qemu.
 ====
Index: distinfo
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/distinfo,v
retrieving revision 1.16
diff -u -r1.16 distinfo
--- distinfo	8 Mar 2005 23:02:58 -0000	1.16
+++ distinfo	29 Apr 2005 06:32:57 -0000
@@ -1,2 +1,2 @@
-MD5 (qemu-snapshot-2005-03-05_23.tar.bz2) = f0ef5e1e3570df94d910d00cc9f62f6e
-SIZE (qemu-snapshot-2005-03-05_23.tar.bz2) = 962774
+MD5 (qemu-0.7.0.tar.gz) = 234e9ace03b00259bb57dc5a9c633056
+SIZE (qemu-0.7.0.tar.gz) = 1211802
Index: files/patch-aa
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-aa,v
retrieving revision 1.3
diff -u -r1.3 patch-aa
--- files/patch-aa	25 Oct 2004 14:57:30 -0000	1.3
+++ files/patch-aa	29 Apr 2005 06:32:57 -0000
@@ -10,222 +10,3 @@
  
  qemu.1: qemu-doc.texi
  	./texi2pod.pl $< qemu.pod
-Only in qemu-0.5.5: qemu.1
-diff -urd --exclude=CVS ../cvs/qemu/target-i386/cpu.h qemu-0.5.5/target-i386/cpu.h
---- ../cvs/qemu/target-i386/cpu.h	Thu May 20 15:01:56 2004
-+++ qemu-0.5.5/target-i386/cpu.h	Sun May 30 05:16:10 2004
-@@ -259,7 +259,7 @@
-     CC_OP_NB,
- };
- 
--#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD)
-+#if defined(__i386__) || defined(__x86_64__)
- #define USE_X86LDOUBLE
- #endif
- 
-diff -urd --exclude=CVS ../cvs/qemu/target-i386/exec.h qemu-0.5.5/target-i386/exec.h
---- ../cvs/qemu/target-i386/exec.h	Sat May 29 12:08:52 2004
-+++ qemu-0.5.5/target-i386/exec.h	Sun May 30 05:19:43 2004
-@@ -293,6 +293,22 @@
- 
- #endif /* !defined(CONFIG_USER_ONLY) */
- 
-+#if defined(_BSD) && defined(USE_X86LDOUBLE)
-+#include <math.h>
-+/*int rintl(long double __x);
-+long int lrintl(long double __x);
-+long long int llrintl(long double __x);
-+long double powl(long double __x, long double __y);
-+long double logl(long double __x);
-+long double tanl(long double __x);
-+long double atan2l(long double __y, long double __x);
-+long double ceill(long double __x);
-+long double floorl(long double __x);
-+long double sqrtl(long double __x);
-+long double sinl(long double __x);
-+long double cosl(long double __x);*/
-+#endif
-+
- #ifdef USE_X86LDOUBLE
- /* use long double functions */
- #define lrint lrintl
-@@ -310,7 +326,7 @@
- #define rint rintl
- #endif
- 
--#if !defined(_BSD)
-+#if !defined(_BSD) || defined(USE_X86LDOUBLE)
- extern int lrint(CPU86_LDouble x);
- extern int64_t llrint(CPU86_LDouble x);
- #else
-diff -urd --exclude=CVS ../cvs/qemu/target-i386/op.c qemu-0.5.5/target-i386/op.c
---- ../cvs/qemu/target-i386/op.c	Sat May 29 12:08:52 2004
-+++ qemu-0.5.5/target-i386/op.c	Sun May 30 05:40:54 2004
-@@ -1304,6 +1304,149 @@
-    functions comes from the LGPL'ed x86 emulator found in the Willows
-    TWIN windows emulator. */
- 
-+#if defined(_BSD) && defined(USE_X86LDOUBLE)
-+
-+CPU86_LDouble rintl(CPU86_LDouble __x) {
-+  CPU86_LDouble __rintres;
-+  __asm__ __volatile__
-+    ("fistp %0"
-+     : "=m" (__rintres) : "t" (__x) : "st");
-+  return __rintres;
-+}
-+
-+int lrintl(CPU86_LDouble __x) {
-+  int __lrintres;
-+  __asm__ __volatile__
-+    ("fistpl %0"
-+     : "=m" (__lrintres) : "t" (__x) : "st");
-+  return __lrintres;
-+}
-+
-+
-+int64_t llrintl(CPU86_LDouble __x) {
-+  int64_t __llrintres;
-+  __asm__ __volatile__
-+    ("fistpll %0"
-+     : "=m" (__llrintres) : "t" (__x) : "st");
-+  return __llrintres;
-+}
-+
-+CPU86_LDouble powl(CPU86_LDouble __x, CPU86_LDouble __y) {
-+  register CPU86_LDouble __value;
-+  register long double __exponent;
-+  __extension__ long long int __p = (long long int) __y;
-+  if (__x == 0.0)
-+    {
-+       if (__y > 0.0)
-+         return __y == (double) __p && (__p & 1) != 0 ? __x : 0.0;
-+       else if (__y < 0.0)
-+         return (__y == (double) __p && (-__p & 1) != 0
-+                 ? 1.0 / __x : 1.0 / fabs (__x));
-+    }
-+  if (__y == (double) __p)
-+    {
-+      long double __r = 1.0;
-+      if (__p == 0)
-+        return 1.0;
-+      if (__p < 0)
-+        {
-+          __p = -__p;
-+          __x = 1.0 / __x;
-+        }
-+      while (1)
-+        {
-+          if (__p & 1)
-+            __r *= __x;
-+          __p >>= 1;
-+          if (__p == 0)
-+            return __r;
-+          __x *= __x;
-+        }
-+      /* NOTREACHED */
-+    }
-+  __asm __volatile__
-+    ("fyl2x" : "=t" (__value) : "0" (__x), "u" (1.0) : "st(1)");
-+  __asm __volatile__
-+    ("fmul      %%st(1)         # y * log2(x)\n\t"
-+     "fst       %%st(1)\n\t"
-+     "frndint                   # int(y * log2(x))\n\t"
-+     "fxch\n\t"
-+     "fsub      %%st(1)         # fract(y * log2(x))\n\t"
-+     "f2xm1                     # 2^(fract(y * log2(x))) - 1\n\t"
-+     : "=t" (__value), "=u" (__exponent) : "0" (__y), "1" (__value));
-+  __value += 1.0;
-+  __asm __volatile__
-+    ("fscale"
-+     : "=t" (__value) : "0" (__value), "u" (__exponent));
-+  return __value;
-+}
-+
-+CPU86_LDouble logl(CPU86_LDouble __x) {
-+  register CPU86_LDouble __result;
-+  __asm __volatile__ ("fldln2; fxch; fyl2x" : "=t" (__result) : "0" (__x) : "st(1)");
-+  return __result;
-+}
-+
-+CPU86_LDouble tanl(CPU86_LDouble __x) {
-+  register CPU86_LDouble __value;
-+  register CPU86_LDouble __value2 __attribute__ ((__unused__));
-+  __asm __volatile__
-+    ("fptan"
-+     : "=t" (__value2), "=u" (__value) : "0" (__x));
-+  return __value;
-+}
-+
-+CPU86_LDouble atan2l(CPU86_LDouble __y, CPU86_LDouble __x) {
-+  register CPU86_LDouble __value;
-+  __asm __volatile__
-+    ("fpatan"
-+     : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)");
-+  return __value;
-+}
-+
-+CPU86_LDouble ceill(CPU86_LDouble __x) {
-+  register CPU86_LDouble __value;
-+  __volatile unsigned short int __cw;
-+  __volatile unsigned short int __cwtmp;
-+  __asm __volatile ("fnstcw %0" : "=m" (__cw));
-+  __cwtmp = (__cw & 0xf3ff) | 0x0800; /* rounding up */
-+  __asm __volatile ("fldcw %0" : : "m" (__cwtmp));
-+  __asm __volatile ("frndint" : "=t" (__value) : "0" (__x));
-+  __asm __volatile ("fldcw %0" : : "m" (__cw));
-+  return __value;
-+}
-+
-+CPU86_LDouble floorl(CPU86_LDouble __x) {
-+  register CPU86_LDouble __value;
-+  __volatile unsigned short int __cw;
-+  __volatile unsigned short int __cwtmp;
-+  __asm __volatile ("fnstcw %0" : "=m" (__cw));
-+  __cwtmp = (__cw & 0xf3ff) | 0x0400; /* rounding down */
-+  __asm __volatile ("fldcw %0" : : "m" (__cwtmp));
-+  __asm __volatile ("frndint" : "=t" (__value) : "0" (__x));
-+  __asm __volatile ("fldcw %0" : : "m" (__cw));
-+  return __value;
-+}
-+
-+CPU86_LDouble sqrtl(CPU86_LDouble __x) {
-+  register CPU86_LDouble __result;
-+  __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x));
-+  return __result;
-+}
-+
-+CPU86_LDouble sinl(CPU86_LDouble __x) {
-+  register CPU86_LDouble __result;
-+  __asm __volatile__ ("fsin" : "=t" (__result) : "0" (__x));
-+  return __result;
-+}
-+
-+CPU86_LDouble cosl(CPU86_LDouble __x) {
-+  register CPU86_LDouble __result;
-+  __asm __volatile__ ("fcos" : "=t" (__result) : "0" (__x));
-+  return __result;
-+}
-+#endif
-+
- #if defined(__powerpc__)
- extern CPU86_LDouble copysign(CPU86_LDouble, CPU86_LDouble);
- 
-diff -urd --exclude=CVS ../cvs/qemu/vl.c qemu-0.5.5/vl.c
---- ../cvs/qemu/vl.c	Wed May 26 23:12:06 2004
-+++ qemu-0.5.5/vl.c	Sun May 30 05:30:56 2004
-@@ -662,6 +662,14 @@
-     case QEMU_TIMER_REALTIME:
- #ifdef _WIN32
-         return GetTickCount();
-+#elif defined(_BSD)
-+        {
-+            struct timeval r;
-+            if (!gettimeofday(&r, NULL)) {
-+                return ((CLK_TCK * 1000LL) * (int64_t)r.tv_sec 
-+                      + ((int64_t)r.tv_usec * CLK_TCK) / 1000) / timer_freq;
-+            }
-+        }        
- #else
-         {
-             struct tms tp;
Index: files/patch-ab
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-ab,v
retrieving revision 1.1
diff -u -r1.1 patch-ab
--- files/patch-ab	3 Jun 2004 02:12:52 -0000	1.1
+++ files/patch-ab	29 Apr 2005 06:32:57 -0000
@@ -1,16 +0,0 @@
-Index: qemu-snapshot-2004-05-30_23-40/target-i386/op.c
-@@ -1307,11 +1307,9 @@
- #if defined(_BSD) && defined(USE_X86LDOUBLE)
- 
- CPU86_LDouble rintl(CPU86_LDouble __x) {
--  CPU86_LDouble __rintres;
--  __asm__ __volatile__
--    ("fistp %0"
--     : "=m" (__rintres) : "t" (__x) : "st");
--  return __rintres;
-+  register CPU86_LDouble __result;
-+  __asm __volatile__ ("frndint" : "=t" (__result) : "0" (__x));
-+  return __result;
- }
- 
- int lrintl(CPU86_LDouble __x) {
Index: files/patch-ac
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-ac,v
retrieving revision 1.1
diff -u -r1.1 patch-ac
--- files/patch-ac	3 Jun 2004 02:12:52 -0000	1.1
+++ files/patch-ac	29 Apr 2005 06:32:57 -0000
@@ -4,7 +4,7 @@
  if test -z "$sdl" ; then
  
 -sdl_config="sdl-config"
-+sdl_config="sdl11-config"
++sdl_config="${SDL_CONFIG}"
  sdl=no
  sdl_static=no
  
Index: files/patch-be
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-be,v
retrieving revision 1.1
diff -u -r1.1 patch-be
--- files/patch-be	3 Jun 2004 02:12:52 -0000	1.1
+++ files/patch-be	29 Apr 2005 06:32:57 -0000
@@ -1,12 +1,16 @@
 Index: qemu/vl.c
-@@ -666,8 +667,8 @@
-         {
-             struct timeval r;
-             if (!gettimeofday(&r, NULL)) {
--                return ((CLK_TCK * 1000LL) * (int64_t)r.tv_sec 
--                      + ((int64_t)r.tv_usec * CLK_TCK) / 1000) / timer_freq;
+@@ -662,6 +662,14 @@
+     case QEMU_TIMER_REALTIME:
+ #ifdef _WIN32
+         return GetTickCount();
++#elif defined(_BSD)
++        {
++            struct timeval r;
++            if (!gettimeofday(&r, NULL)) {
 +                return ((timer_freq * 1000LL) * (int64_t)r.tv_sec 
 +                      + ((int64_t)r.tv_usec * timer_freq) / 1000) / timer_freq;
-             }
-         }        
++            }
++        }        
  #else
+         {
+             struct tms tp;
Index: files/patch-bh
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-bh,v
retrieving revision 1.2
diff -u -r1.2 patch-bh
--- files/patch-bh	11 Jul 2004 11:41:06 -0000	1.2
+++ files/patch-bh	29 Apr 2005 06:32:57 -0000
@@ -24,68 +24,3 @@
  #undef NULL
  #define NULL 0
  #ifdef _BSD
-Index: qemu/target-ppc/op_helper.c
-===================================================================
-RCS file: /cvsroot/qemu/qemu/target-ppc/op_helper.c,v
-retrieving revision 1.6
-diff -w -u -d -r1.6 op_helper.c
---- target-ppc/op_helper.c	21 May 2004 12:59:31 -0000	1.6
-+++ target-ppc/op_helper.c	21 May 2004 15:00:49 -0000
-@@ -210,6 +210,22 @@
-     }
-     /* TODO: update FEX & VX */
-     /* Set rounding mode */
-+#ifdef _BSD
-+    switch(env->fpscr[0] & 0x3) {
-+    case 0:
-+        fpsetround(FP_RN);
-+        break;
-+    case 1:
-+        fpsetround(FP_RZ);
-+        break;
-+    case 2:
-+        fpsetround(FP_RP);
-+        break;
-+    case 3:
-+        fpsetround(FP_RM);
-+        break;
-+    }
-+#else
-     switch (env->fpscr[0] & 0x3) {
-     case 0:
-         /* Best approximation (round to nearest) */
-@@ -228,6 +244,7 @@
-         fesetround(FE_DOWNWARD);
-         break;
-     }
-+#endif
- }
- 
- void do_fctiw (void)
-@@ -253,9 +270,13 @@
-         double d;
-         uint64_t i;
-     } *p = (void *)&FT1;
-+#ifdef _BSD
-+    int cround = fpgetround();
-+    fpsetround(FP_RZ);
-+#else
-     int cround = fegetround();
--
-     fesetround(FE_TOWARDZERO);
-+#endif
-     if (FT0 > (double)0x7FFFFFFF)
-         p->i = 0x7FFFFFFFULL << 32;
-     else if (FT0 < -(double)0x80000000)
-@@ -264,7 +285,11 @@
-         p->i = 0;
-     p->i |= (uint32_t)FT0;
-     FT0 = p->d;
-+#ifdef _BSD
-+    fpsetround(cround);
-+#else
-     fesetround(cround);
-+#endif
- }
- 
- void do_fnmadds (void)
Index: files/patch-block.c
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-block.c,v
retrieving revision 1.2
diff -u -r1.2 patch-block.c
--- files/patch-block.c	17 Nov 2004 09:47:38 -0000	1.2
+++ files/patch-block.c	29 Apr 2005 06:32:57 -0000
@@ -1,71 +0,0 @@
-Index: qemu/block.c
-@@ -21,6 +21,17 @@
-  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-  * THE SOFTWARE.
-  */
-+
-+#include "config-host.h"
-+
-+#ifdef _BSD
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/ioctl.h>
-+#include <sys/queue.h>
-+#include <sys/disk.h>
-+#endif
-+
- #include "vl.h"
- #include "block_int.h"
- 
-@@ -103,14 +103,25 @@
- {
-     int fd, ret, score, score_max;
-     BlockDriver *drv1, *drv;
--    uint8_t buf[1024];
-+    uint8_t *buf;
-+    size_t bufsize = 1024;
-+    u_int sectorsize = 512;
- 
-     fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
-     if (fd < 0)
-         return NULL;
--    ret = read(fd, buf, sizeof(buf));
-+#ifdef DIOCGSECTORSIZE
-+    if (!ioctl(fd, DIOCGSECTORSIZE, &sectorsize) &&
-+        sectorsize > bufsize)
-+        bufsize = sectorsize;
-+#endif
-+    buf = malloc(bufsize);
-+    if (!buf)
-+        return NULL;
-+    ret = read(fd, buf, bufsize);
-     if (ret < 0) {
-         close(fd);
-+        free(buf);
-         return NULL;
-     }
-     close(fd);
-@@ -124,6 +135,7 @@
-             drv = drv1;
-         }
-     }
-+    free(buf);
-     return drv;
- }
- 
-@@ -522,6 +533,15 @@
-             return -1;
-         bs->read_only = 1;
-     }
-+#ifdef _BSD
-+    struct stat sb;
-+    if (!fstat(fd,&sb) && (S_IFCHR & sb.st_mode)) {
-+#ifdef DIOCGMEDIASIZE
-+        if (ioctl(fd, DIOCGMEDIASIZE, (off_t *)&size))
-+#endif
-+            size = lseek(fd, 0LL, SEEK_END);
-+    } else
-+#endif
-     size = lseek(fd, 0, SEEK_END);
-     bs->total_sectors = size / 512;
-     s->fd = fd;
Index: files/patch-target-sparc::op_helper.c
===================================================================
RCS file: /home/ncvs/ports/emulators/qemu/files/patch-target-sparc::op_helper.c,v
retrieving revision 1.1
diff -u -r1.1 patch-target-sparc::op_helper.c
--- files/patch-target-sparc::op_helper.c	28 Oct 2004 15:42:48 -0000	1.1
+++ files/patch-target-sparc::op_helper.c	29 Apr 2005 06:32:57 -0000
@@ -1,8 +0,0 @@
---- qemu/target-sparc/op_helper.c.orig	Mon Oct 11 02:46:24 2004
-+++ qemu/target-sparc/op_helper.c	Thu Oct 28 23:28:57 2004
-@@ -1,5 +1,4 @@
- #include <math.h>
--#include <fenv.h>
- #include "exec.h"
- 
- #ifdef USE_INT_TO_FLOAT_HELPERS
--- files/patch-fbsd.orig	Fri Apr 29 02:33:01 2005
+++ files/patch-fbsd	Wed Apr 27 19:28:40 2005
@@ -0,0 +1,141 @@
+Index: qemu/Makefile
+@@ -13,7 +13,7 @@
+ endif
+ DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1
+ 
+-all: dyngen$(EXESUF) $(TOOLS) $(DOCS)
++all: bsd/libmath.a dyngen$(EXESUF) $(TOOLS) $(DOCS)
+ 	for d in $(TARGET_DIRS); do \
+ 	$(MAKE) -C $$d $@ || exit 1 ; \
+         done
+@@ -25,6 +25,9 @@
+ endif
+ endif
+ 
++bsd/libmath.a:
++	( cd bsd ; $(BSD_MAKE) CC=$(CC) )
++
+ qemu-img$(EXESUF): qemu-img.c block.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c
+ 	$(CC) -DQEMU_TOOL $(CFLAGS) $(LDFLAGS) $(DEFINES) -o $@ $^ -lz $(LIBS)
+ 
+@@ -33,6 +36,7 @@
+ 
+ clean:
+ # avoid old build problems by removing potentially incorrect old files
++	( cd bsd ; $(BSD_MAKE) clean )
+ 	rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h 
+ 	rm -f *.o *.a $(TOOLS) dyngen$(EXESUF) TAGS *.pod *~ */*~
+ 	$(MAKE) -C tests clean
+Index: qemu/Makefile.target
+@@ -391,8 +391,8 @@
+ VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
+ endif
+ 
+-$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
+-	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
++$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a ../bsd/libmath.a
++	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS) ../bsd/libmath.a
+ 
+ cocoa.o: cocoa.m
+ 	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
+Index: qemu/fpu/softfloat-native.c
+@@ -2,11 +2,15 @@
+    context is supported */
+ #include "softfloat.h"
+ #include <math.h>
++#if defined(__FreeBSD__) && __FreeBSD_version < 500000
++#include <ieeefp.h>
++#endif
+ 
+ void set_float_rounding_mode(int val STATUS_PARAM)
+ {
+     STATUS(float_rounding_mode) = val;
+-#if defined(_BSD) && !defined(__APPLE__)
++#if defined(_BSD) && !defined(__APPLE__) && \
++    (defined(__FreeBSD__) && __FreeBSD_version < 500000)
+     fpsetround(val);
+ #elif defined(__arm__)
+     /* nothing to do */
+@@ -22,7 +26,7 @@
+ }
+ #endif
+ 
+-#if defined(_BSD)
++#if defined(_BSD) && !defined(__FreeBSD__)
+ #define lrint(d)		((int32_t)rint(d))
+ #define llrint(d)		((int64_t)rint(d))
+ #endif
+Index: qemu/fpu/softfloat-native.h
+@@ -1,7 +1,17 @@
+ /* Native implementation of soft float functions */
+ #include <math.h>
+-#if defined(_BSD) && !defined(__APPLE__)
++#if defined(_BSD) && !defined(__APPLE__) && \
++    (!defined(__FreeBSD__) || __FreeBSD_version < 500000)
+ #include <ieeefp.h>
++#if defined(__FreeBSD__)
++#define isgreater(x, y)		__builtin_isgreater((x), (y))
++#define isgreaterequal(x, y)	__builtin_isgreaterequal((x), (y))
++#define isless(x, y)		__builtin_isless((x), (y))
++#define islessequal(x, y)	__builtin_islessequal((x), (y))
++#define islessgreater(x, y)	__builtin_islessgreater((x), (y))
++#define isunordered(x, y)	__builtin_isunordered((x), (y))
++long double fabsl(long double x);
++#endif
+ #else
+ #include <fenv.h>
+ #endif
+@@ -33,12 +43,13 @@
+ /*----------------------------------------------------------------------------
+ | Software IEC/IEEE floating-point rounding mode.
+ *----------------------------------------------------------------------------*/
+-#if defined(_BSD) && !defined(__APPLE__)
++#if defined(_BSD) && !defined(__APPLE__) && \
++    (!defined(__FreeBSD__) || __FreeBSD_version < 500000)
+ enum {
+     float_round_nearest_even = FP_RN,
+-    float_round_down         = FE_RM,
+-    float_round_up           = FE_RP,
+-    float_round_to_zero      = FE_RZ
++    float_round_down         = FP_RM,
++    float_round_up           = FP_RP,
++    float_round_to_zero      = FP_RZ
+ };
+ #elif defined(__arm__)
+ enum {
+Index: qemu/fpu/softfloat.h
+@@ -84,7 +84,8 @@
+ #define FLOAT128
+ #else
+ /* native float support */
+-#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD)
++#if (defined(__i386__) || defined(__x86_64__)) && \
++    (!defined(_BSD) || defined(__FreeBSD__))
+ #define FLOATX80
+ #endif
+ #endif /* !CONFIG_SOFTFLOAT */
+Index: qemu/target-ppc/op_helper.c
+@@ -303,6 +303,13 @@
+     FT0 = sqrt(FT0);
+ }
+ 
++#ifndef isnormal
++#define isnormal(x)					\
++    ((sizeof (x) == sizeof (float)) ? __isnormalf(x)	\
++    : (sizeof (x) == sizeof (double)) ? __isnormal(x)	\
++    : __isnormall(x))
++#endif
++
+ void do_fres (void)
+ {
+     union {
+Index: qemu/x86_64.ld
+@@ -2,7 +2,7 @@
+ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
+ OUTPUT_ARCH(i386:x86-64)
+ ENTRY(_start)
+-SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/local/lib64");
++SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/local/lib");
+ SECTIONS
+ {
+   /* Read-only sections, merged into text segment: */
--- files/patch-libmath.orig	Fri Apr 29 02:33:01 2005
+++ files/patch-libmath	Fri Apr 29 02:31:02 2005
@@ -0,0 +1,2524 @@
+diff -Nru qemu-0.7.0/bsd.orig/Makefile qemu-0.7.0/bsd/Makefile
+--- qemu-0.7.0/bsd.orig/Makefile	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/Makefile	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,32 @@
++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
++
++OBJS=	${SRCS:R:S/$/.o/}
++
++CFLAGS=	-O2 -Wall -I.
++
++all: libmath.a
++
++libmath.a: ${OBJS}
++	rm -f $@
++	${AR} rcs $@ ${OBJS:T}
++
++clean:
++	rm -f ${OBJS:T} libmath.a
+diff -Nru qemu-0.7.0/bsd.orig/amd64/e_atan2l.c qemu-0.7.0/bsd/amd64/e_atan2l.c
+--- qemu-0.7.0/bsd.orig/amd64/e_atan2l.c	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/e_atan2l.c	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,20 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <sysdep.h>
++
++long double
++__ieee754_atan2l (long double y, long double x)
++{
++  long double res;
++
++  asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)");
++
++  return res;
++}
++
++weak_alias(__ieee754_atan2l, atan2l)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/e_logl.S qemu-0.7.0/bsd/amd64/e_logl.S
+--- qemu-0.7.0/bsd.orig/amd64/e_logl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/e_logl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,59 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++RCSID("$NetBSD: $")
++
++
++#ifdef __ELF__
++	.section .rodata
++#else
++	.text
++#endif
++	.align ALIGNARG(4)
++	ASM_TYPE_DIRECTIVE(one,@object)
++one:	.double 1.0
++	ASM_SIZE_DIRECTIVE(one)
++	/* It is not important that this constant is precise.  It is only
++	   a value which is known to be on the safe side for using the
++	   fyl2xp1 instruction.  */
++	ASM_TYPE_DIRECTIVE(limit,@object)
++limit:	.double 0.29
++	ASM_SIZE_DIRECTIVE(limit)
++
++
++#ifdef PIC
++#define MO(op) op##(%rip)
++#else
++#define MO(op) op
++#endif
++
++	.text
++ENTRY(__ieee754_logl)
++	fldln2			// log(2)
++	fldt	8(%rsp)		// x : log(2)
++	fld	%st		// x : x : log(2)
++	fsubl	MO(one)		// x-1 : x : log(2)
++	fld	%st		// x-1 : x-1 : x : log(2)
++	fabs			// |x-1| : x-1 : x : log(2)
++	fcompl	MO(limit)	// x-1 : x : log(2)
++	fnstsw			// x-1 : x : log(2)
++	andb	$0x45, %ah
++	jz	2f
++	fstp	%st(1)		// x-1 : log(2)
++	fyl2xp1			// log(x)
++	ret
++
++2:	fstp	%st(0)		// x : log(2)
++	fyl2x			// log(x)
++	ret
++END (__ieee754_logl)
++
++weak_alias(__ieee754_logl,logl)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/e_powl.S qemu-0.7.0/bsd/amd64/e_powl.S
+--- qemu-0.7.0/bsd.orig/amd64/e_powl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/e_powl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,341 @@
++/* ix87 specific implementation of pow function.
++   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++#ifdef __ELF__
++	.section .rodata
++#else
++	.text
++#endif
++
++	.align ALIGNARG(4)
++	ASM_TYPE_DIRECTIVE(infinity,@object)
++inf_zero:
++infinity:
++	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
++	ASM_SIZE_DIRECTIVE(infinity)
++	ASM_TYPE_DIRECTIVE(zero,@object)
++zero:	.double 0.0
++	ASM_SIZE_DIRECTIVE(zero)
++	ASM_TYPE_DIRECTIVE(minf_mzero,@object)
++minf_mzero:
++minfinity:
++	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
++mzero:
++	.byte 0, 0, 0, 0, 0, 0, 0, 0x80
++	ASM_SIZE_DIRECTIVE(minf_mzero)
++	ASM_TYPE_DIRECTIVE(one,@object)
++one:	.double 1.0
++	ASM_SIZE_DIRECTIVE(one)
++	ASM_TYPE_DIRECTIVE(limit,@object)
++limit:	.double 0.29
++	ASM_SIZE_DIRECTIVE(limit)
++	ASM_TYPE_DIRECTIVE(p63,@object)
++p63:
++	.byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43
++	ASM_SIZE_DIRECTIVE(p63)
++
++#ifdef PIC
++#define MO(op) op##(%rip)
++#else
++#define MO(op) op
++#endif
++
++	.text
++ENTRY(__ieee754_powl)
++	fldt	24(%rsp)	// y
++	fxam
++
++
++	fnstsw
++	movb	%ah, %dl
++	andb	$0x45, %ah
++	cmpb	$0x40, %ah	// is y == 0 ?
++	je	11f
++
++	cmpb	$0x05, %ah	// is y == ±inf ?
++	je	12f
++
++	cmpb	$0x01, %ah	// is y == NaN ?
++	je	30f
++
++	fldt	8(%rsp)		// x : y
++
++	fxam
++	fnstsw
++	movb	%ah, %dh
++	andb	$0x45, %ah
++	cmpb	$0x40, %ah
++	je	20f		// x is ±0
++
++	cmpb	$0x05, %ah
++	je	15f		// x is ±inf
++
++	fxch			// y : x
++
++	/* fistpll raises invalid exception for |y| >= 1L<<63.  */
++	fldl	MO(p63)		// 1L<<63 : y : x
++	fld	%st(1)		// y : 1L<<63 : y : x
++	fabs			// |y| : 1L<<63 : y : x
++	fcomip	%st(1), %st	// 1L<<63 : y : x
++	fstp	%st(0)		// y : x
++	jnc	2f
++
++	/* First see whether `y' is a natural number.  In this case we
++	   can use a more precise algorithm.  */
++	fld	%st		// y : y : x
++	fistpll	-8(%rsp)	// y : x
++	fildll	-8(%rsp)	// int(y) : y : x
++	fucomip	%st(1),%st	// y : x
++	jne	2f
++
++	/* OK, we have an integer value for y.  */
++	mov	-8(%rsp),%eax
++	mov	-4(%rsp),%edx
++	orl	$0, %edx
++	fstp	%st(0)		// x
++	jns	4f		// y >= 0, jump
++	fdivrl	MO(one)		// 1/x		(now referred to as x)
++	negl	%eax
++	adcl	$0, %edx
++	negl	%edx
++4:	fldl	MO(one)		// 1 : x
++	fxch
++
++6:	shrdl	$1, %edx, %eax
++	jnc	5f
++	fxch
++	fmul	%st(1)		// x : ST*x
++	fxch
++5:	fmul	%st(0), %st	// x*x : ST*x
++	shrl	$1, %edx
++	movl	%eax, %ecx
++	orl	%edx, %ecx
++	jnz	6b
++	fstp	%st(0)		// ST*x
++	ret
++
++	/* y is ±NAN */
++30:	fldt	8(%rsp)		// x : y
++	fldl	MO(one)		// 1.0 : x : y
++	fucomip	%st(1),%st	// x : y
++	je	31f
++	fxch			// y : x
++31:	fstp	%st(1)
++	ret
++
++	.align ALIGNARG(4)
++2:	/* y is a real number.  */
++	fxch			// x : y
++	fldl	MO(one)		// 1.0 : x : y
++	fld	%st(1)		// x : 1.0 : x : y
++	fsub	%st(1)		// x-1 : 1.0 : x : y
++	fabs			// |x-1| : 1.0 : x : y
++	fcompl	MO(limit)	// 1.0 : x : y
++	fnstsw
++	fxch			// x : 1.0 : y
++	test	$4500,%eax
++	jz	7f
++	fsub	%st(1)		// x-1 : 1.0 : y
++	fyl2xp1			// log2(x) : y
++	jmp	8f
++
++7:	fyl2x			// log2(x) : y
++8:	fmul	%st(1)		// y*log2(x) : y
++	fxam
++	fnstsw
++	andb	$0x45, %ah
++	cmpb	$0x05, %ah      // is y*log2(x) == ±inf ?
++	je	28f
++	fst	%st(1)		// y*log2(x) : y*log2(x)
++	frndint			// int(y*log2(x)) : y*log2(x)
++	fsubr	%st, %st(1)	// int(y*log2(x)) : fract(y*log2(x))
++	fxch			// fract(y*log2(x)) : int(y*log2(x))
++	f2xm1			// 2^fract(y*log2(x))-1 : int(y*log2(x))
++	faddl	MO(one)		// 2^fract(y*log2(x)) : int(y*log2(x))
++	fscale			// 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
++	fstp	%st(1)		// 2^fract(y*log2(x))*2^int(y*log2(x))
++	ret
++
++28:	fstp	%st(1)		// y*log2(x)
++	fldl	MO(one)		// 1 : y*log2(x)
++	fscale			// 2^(y*log2(x)) : y*log2(x)
++	fstp	%st(1)		// 2^(y*log2(x))
++	ret
++
++	// pow(x,±0) = 1
++	.align ALIGNARG(4)
++11:	fstp	%st(0)		// pop y
++	fldl	MO(one)
++	ret
++
++	// y == ±inf
++	.align ALIGNARG(4)
++12:	fstp	%st(0)		// pop y
++	fldt	8(%rsp)		// x
++	fabs
++	fcompl	MO(one)		// < 1, == 1, or > 1
++	fnstsw
++	andb	$0x45, %ah
++	cmpb	$0x45, %ah
++	je	13f		// jump if x is NaN
++
++	cmpb	$0x40, %ah
++	je	14f		// jump if |x| == 1
++
++	shlb	$1, %ah
++	xorb	%ah, %dl
++	andl	$2, %edx
++#ifdef PIC
++	lea	inf_zero(%rip),%rcx
++	fldl	(%rcx, %rdx, 4)
++#else
++	fldl	inf_zero(,%rdx, 4)
++#endif
++	ret
++
++	.align ALIGNARG(4)
++14:	fldl	MO(one)
++	ret
++
++	.align ALIGNARG(4)
++13:	fldt	8(%rsp)		// load x == NaN
++	ret
++
++	.align ALIGNARG(4)
++	// x is ±inf
++15:	fstp	%st(0)		// y
++	testb	$2, %dh
++	jz	16f		// jump if x == +inf
++
++	// We must find out whether y is an odd integer.
++	fld	%st		// y : y
++	fistpll	-8(%rsp)	// y
++	fildll	-8(%rsp)	// int(y) : y
++	fucomip %st(1),%st
++	ffreep	%st		// <empty>
++	jne	17f
++
++	// OK, the value is an integer, but is it odd?
++	mov	-8(%rsp), %eax
++	mov	-4(%rsp), %edx
++	andb	$1, %al
++	jz	18f		// jump if not odd
++	// It's an odd integer.
++	shrl	$31, %edx
++#ifdef PIC
++	lea	minf_mzero(%rip),%rcx
++	fldl	(%rcx, %rdx, 8)
++#else
++	fldl	minf_mzero(,%rdx, 8)
++#endif
++	ret
++
++	.align ALIGNARG(4)
++16:	fcompl	MO(zero)
++	fnstsw
++	shrl	$5, %eax
++	andl	$8, %eax
++#ifdef PIC
++	lea	inf_zero(%rip),%rcx
++	fldl	(%rcx, %rax, 1)
++#else
++	fldl	inf_zero(,%rax, 1)
++#endif
++	ret
++
++	.align ALIGNARG(4)
++17:	shll	$30, %edx	// sign bit for y in right position
++18:	shrl	$31, %edx
++#ifdef PIC
++	lea	inf_zero(%rip),%rcx
++	fldl	(%rcx, %rdx, 8)
++#else
++	fldl	inf_zero(,%rdx, 8)
++#endif
++	ret
++
++	.align ALIGNARG(4)
++	// x is ±0
++20:	fstp	%st(0)		// y
++	testb	$2, %dl
++	jz	21f		// y > 0
++
++	// x is ±0 and y is < 0.  We must find out whether y is an odd integer.
++	testb	$2, %dh
++	jz	25f
++
++	fld	%st		// y : y
++	fistpll	-8(%rsp)	// y
++	fildll	-8(%rsp)	// int(y) : y
++	fucomip	%st(1),%st
++	ffreep	%st		// <empty>
++	jne	26f
++
++	// OK, the value is an integer, but is it odd?
++	mov	-8(%rsp),%eax
++	mov	-4(%rsp),%edx
++	andb	$1, %al
++	jz	27f		// jump if not odd
++	// It's an odd integer.
++	// Raise divide-by-zero exception and get minus infinity value.
++	fldl	MO(one)
++	fdivl	MO(zero)
++	fchs
++	ret
++
++25:	fstp	%st(0)
++26:
++27:	// Raise divide-by-zero exception and get infinity value.
++	fldl	MO(one)
++	fdivl	MO(zero)
++	ret
++
++	.align ALIGNARG(4)
++	// x is ±0 and y is > 0.  We must find out whether y is an odd integer.
++21:	testb	$2, %dh
++	jz	22f
++
++	fld	%st		// y : y
++	fistpll	-8(%rsp)	// y
++	fildll	-8(%rsp)	// int(y) : y
++	fucomip %st(1),%st
++	ffreep	%st		// <empty>
++	jne	23f
++
++	// OK, the value is an integer, but is it odd?
++	mov	-8(%rsp),%eax
++	mov	-4(%rsp),%edx
++	andb	$1, %al
++	jz	24f		// jump if not odd
++	// It's an odd integer.
++	fldl	MO(mzero)
++	ret
++
++22:	fstp	%st(0)
++23:
++24:	fldl	MO(zero)
++	ret
++
++END(__ieee754_powl)
++
++weak_alias(__ieee754_powl,powl)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/e_remainderl.S qemu-0.7.0/bsd/amd64/e_remainderl.S
+--- qemu-0.7.0/bsd.orig/amd64/e_remainderl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/e_remainderl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,23 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++ENTRY(__ieee754_remainderl)
++	fldt	24(%rsp)
++	fldt	8(%rsp)
++1:	fprem1
++	fstsw	%ax
++	testl	$0x400,%eax
++	jnz	1b
++	fstp	%st(1)
++	ret
++END (__ieee754_remainderl)
++
++weak_alias(__ieee754_remainderl,remainderl)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/e_sqrtl.c qemu-0.7.0/bsd/amd64/e_sqrtl.c
+--- qemu-0.7.0/bsd.orig/amd64/e_sqrtl.c	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/e_sqrtl.c	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,20 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <sysdep.h>
++
++long double
++__ieee754_sqrtl (long double x)
++{
++  long double res;
++
++  asm ("fsqrt" : "=t" (res) : "0" (x));
++
++  return res;
++}
++
++weak_alias(__ieee754_sqrtl,sqrtl)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_ceill.S qemu-0.7.0/bsd/amd64/s_ceill.S
+--- qemu-0.7.0/bsd.orig/amd64/s_ceill.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_ceill.S	Fri Apr 29 02:22:18 2005
+@@ -0,0 +1,246 @@
++/*
++ * ====================================================
++ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
++ *
++ * Developed at SunPro, a Sun Microsystems, Inc. business.
++ * Permission to use, copy, modify, and distribute this
++ * software is freely granted, provided that this notice
++ * is preserved.
++ * ====================================================
++ *
++ * From: @(#)s_ceil.c 5.1 93/09/24
++ */
++/* XXX: generated from src/lib/msun/src/s_ceill.c */
++
++#include <machine/asm.h>
++
++__FBSDID("$FreeBSD: src/lib/msun/src/s_ceill.c,v 1.4 2005/04/28 19:45:55 stefanf Exp $")
++
++	.file	"s_ceill.c"
++	.section	.rodata.cst8,"aM",@progbits,8
++	.p2align 3
++.LC0:
++	.long	2281731484
++	.long	2117592124
++	.text
++	.p2align 4,,15
++.globl ceill
++	.type	ceill, @function
++ceill:
++.LFB17:
++	pushq	%rbp
++.LCFI0:
++	pushq	%rbx
++.LCFI1:
++	fldt	24(%rsp)
++	movq	$0, -16(%rsp)
++	fld	%st(0)
++	fstpt	-40(%rsp)
++	movl	-32(%rsp), %edi
++	movq	-40(%rsp), %rsi
++	movl	%edi, -16(%rsp)
++	movl	-16(%rsp), %r11d
++	movq	%rsi, -24(%rsp)
++	movl	%r11d, %r10d
++	andl	$32767, %r10d
++	leal	-16383(%r10), %r8d
++	cmpl	$30, %r8d
++	jg	.L2
++	testl	%r8d, %r8d
++	js	.L38
++	movl	-20(%rsp), %r9d
++	leal	1(%r8), %ecx
++	mov	-24(%rsp), %eax
++	movl	$4294967295, %ebp
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	shrq	%cl, %rbp
++	mov	%r9d, %ebx
++	movq	%rbx, %rdx
++	andq	%rbp, %rdx
++	orq	%rax, %rdx
++	fldt	-40(%rsp)
++	je	.L42
++	ffreep	%st(0)
++	testb	$-128, -15(%rsp)
++	jne	.L12
++	movl	$31, %ecx
++	movl	$1, %eax
++	subl	%r8d, %ecx
++	salq	%cl, %rax
++	addl	%eax, %r9d
++	mov	%r9d, %eax
++	cmpq	%rbx, %rax
++	jae	.L32
++	leal	1(%r10), %edx
++	movl	%r11d, %eax
++	orl	$-2147483648, %r9d
++	andw	$-32768, %ax
++	andw	$32767, %dx
++	orl	%edx, %eax
++	movw	%ax, -16(%rsp)
++.L32:
++	movl	%r9d, -20(%rsp)
++.L12:
++	faddl	.LC0(%rip)
++	fldz
++	fxch	%st(1)
++	fucomip	%st(1), %st
++	fstp	%st(0)
++	jbe	.L31
++	movl	%ebp, %eax
++	movl	$0, -24(%rsp)
++	notl	%eax
++	andl	%eax, %r9d
++	movl	%r9d, -20(%rsp)
++	.p2align 4,,7
++.L31:
++	movq	-24(%rsp), %rsi
++	movl	-16(%rsp), %edi
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	fldt	-40(%rsp)
++	popq	%rbx
++	popq	%rbp
++	ret
++	.p2align 4,,7
++.L2:
++	cmpl	$62, %r8d
++	jle	.L45
++.L44:
++	ffreep	%st(0)
++.L17:
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	fldt	-40(%rsp)
++	popq	%rbx
++	popq	%rbp
++	ret
++	.p2align 4,,7
++.L45:
++	movl	-24(%rsp), %edx
++	leal	1(%r8), %ecx
++	movq	$-1, %rbx
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	shrq	%cl, %rbx
++	mov	%edx, %r9d
++	testq	%rbx, %r9
++	fldt	-40(%rsp)
++	je	.L42
++	ffreep	%st(0)
++	testb	$-128, -15(%rsp)
++	jne	.L20
++	cmpl	$31, %r8d
++	je	.L36
++	movl	$63, %ecx
++	movl	$1, %eax
++	subl	%r8d, %ecx
++	salq	%cl, %rax
++	leal	(%rdx,%rax), %eax
++	movl	%eax, -24(%rsp)
++	mov	%eax, %eax
++	cmpq	%r9, %rax
++	jae	.L20
++.L36:
++	movl	-20(%rsp), %eax
++	leal	1(%rax), %ecx
++	cmpl	%eax, %ecx
++	jae	.L34
++	leal	1(%r10), %edx
++	movl	%r11d, %eax
++	orl	$-2147483648, %ecx
++	andw	$-32768, %ax
++	andw	$32767, %dx
++	orl	%edx, %eax
++	movw	%ax, -16(%rsp)
++.L34:
++	movl	%ecx, -20(%rsp)
++	.p2align 4,,7
++.L20:
++	faddl	.LC0(%rip)
++	fldz
++	fxch	%st(1)
++	fucomip	%st(1), %st
++	fstp	%st(0)
++	jbe	.L31
++	movl	%ebx, %eax
++	notl	%eax
++	andl	%eax, -24(%rsp)
++	jmp	.L31
++	.p2align 4,,7
++.L42:
++	fstp	%st(1)
++	popq	%rbx
++	popq	%rbp
++	ret
++	.p2align 4,,7
++.L38:
++	fldl	.LC0(%rip)
++	faddp	%st, %st(1)
++	fldz
++	fxch	%st(1)
++	fucomip	%st(1), %st
++	jbe	.L44
++	testl	%r10d, %r10d
++	jle	.L39
++.L7:
++	movabsq	$-9223372036854775808, %rsi
++	movl	$16383, %edi
++	testb	$-128, -15(%rsp)
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	fldt	-40(%rsp)
++	fcmovne	%st(1), %st
++	fstp	%st(1)
++	fstpt	-40(%rsp)
++	movq	-40(%rsp), %rsi
++	movl	-32(%rsp), %edi
++	movq	%rsi, -24(%rsp)
++	movl	%edi, -16(%rsp)
++	jmp	.L17
++.L39:
++	movl	-24(%rsp), %eax
++	orl	-20(%rsp), %eax
++	je	.L44
++	jmp	.L7
++.LFE17:
++	.size	ceill, .-ceill
++	.section	.eh_frame,"a",@progbits
++.Lframe1:
++	.long	.LECIE1-.LSCIE1
++.LSCIE1:
++	.long	0x0
++	.byte	0x1
++	.string	""
++	.uleb128 0x1
++	.sleb128 -8
++	.byte	0x10
++	.byte	0xc
++	.uleb128 0x7
++	.uleb128 0x8
++	.byte	0x90
++	.uleb128 0x1
++	.p2align 3
++.LECIE1:
++.LSFDE1:
++	.long	.LEFDE1-.LASFDE1
++.LASFDE1:
++	.long	.LASFDE1-.Lframe1
++	.quad	.LFB17
++	.quad	.LFE17-.LFB17
++	.byte	0x4
++	.long	.LCFI0-.LFB17
++	.byte	0xe
++	.uleb128 0x10
++	.byte	0x4
++	.long	.LCFI1-.LCFI0
++	.byte	0xe
++	.uleb128 0x18
++	.byte	0x83
++	.uleb128 0x3
++	.byte	0x86
++	.uleb128 0x2
++	.p2align 3
++.LEFDE1:
++	.ident	"GCC: (GNU) 3.4.4 [FreeBSD] 20050421"
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_cosl.S qemu-0.7.0/bsd/amd64/s_cosl.S
+--- qemu-0.7.0/bsd.orig/amd64/s_cosl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_cosl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,33 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++RCSID("$NetBSD: $")
++
++ENTRY(__cosl)
++	fldt	8(%rsp)
++	fcos
++	fnstsw	%ax
++	testl	$0x400,%eax
++	jnz	1f
++	ret
++	.align ALIGNARG(4)
++1:	fldpi
++	fadd	%st(0)
++	fxch	%st(1)
++2:	fprem1
++	fnstsw	%ax
++	testl	$0x400,%eax
++	jnz	2b
++	fstp	%st(1)
++	fcos
++	ret
++END (__cosl)
++weak_alias (__cosl, cosl)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_floorl.S qemu-0.7.0/bsd/amd64/s_floorl.S
+--- qemu-0.7.0/bsd.orig/amd64/s_floorl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_floorl.S	Fri Apr 29 02:24:32 2005
+@@ -0,0 +1,247 @@
++/*
++ * ====================================================
++ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
++ *
++ * Developed at SunPro, a Sun Microsystems, Inc. business.
++ * Permission to use, copy, modify, and distribute this
++ * software is freely granted, provided that this notice
++ * is preserved.
++ * ====================================================
++ *
++ * From: @(#)s_floor.c 5.1 93/09/24
++ */
++/* XXX: generated from src/lib/msun/src/s_floorl.c */
++
++#include <machine/asm.h>
++
++__FBSDID("$FreeBSD: src/lib/msun/src/s_floorl.c,v 1.4 2005/04/28 19:45:55 stefanf Exp $")
++
++	.file	"s_floorl.c"
++	.section	.rodata.cst8,"aM",@progbits,8
++	.p2align 3
++.LC0:
++	.long	2281731484
++	.long	2117592124
++	.section	.rodata.cst4,"aM",@progbits,4
++	.p2align 2
++.LC2:
++	.long	3212836864
++	.text
++	.p2align 4,,15
++.globl floorl
++	.type	floorl, @function
++floorl:
++.LFB17:
++	pushq	%rbp
++.LCFI0:
++	pushq	%rbx
++.LCFI1:
++	fldt	24(%rsp)
++	movq	$0, -16(%rsp)
++	fld	%st(0)
++	fstpt	-40(%rsp)
++	movl	-32(%rsp), %edi
++	movq	-40(%rsp), %rsi
++	movl	%edi, -16(%rsp)
++	movl	-16(%rsp), %r11d
++	movq	%rsi, -24(%rsp)
++	movl	%r11d, %r10d
++	andl	$32767, %r10d
++	leal	-16383(%r10), %r8d
++	cmpl	$30, %r8d
++	jg	.L2
++	testl	%r8d, %r8d
++	js	.L38
++	movl	-20(%rsp), %r9d
++	leal	1(%r8), %ecx
++	mov	-24(%rsp), %eax
++	movl	$4294967295, %ebp
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	shrq	%cl, %rbp
++	mov	%r9d, %ebx
++	movq	%rbx, %rdx
++	andq	%rbp, %rdx
++	orq	%rax, %rdx
++	fldt	-40(%rsp)
++	je	.L42
++	ffreep	%st(0)
++	testb	$-128, -15(%rsp)
++	je	.L12
++	movl	$31, %ecx
++	movl	$1, %eax
++	subl	%r8d, %ecx
++	salq	%cl, %rax
++	addl	%eax, %r9d
++	mov	%r9d, %eax
++	cmpq	%rbx, %rax
++	jae	.L32
++	leal	1(%r10), %edx
++	movl	%r11d, %eax
++	orl	$-2147483648, %r9d
++	andw	$-32768, %ax
++	andw	$32767, %dx
++	orl	%edx, %eax
++	movw	%ax, -16(%rsp)
++.L32:
++	movl	%r9d, -20(%rsp)
++.L12:
++	faddl	.LC0(%rip)
++	fldz
++	fxch	%st(1)
++	fucomip	%st(1), %st
++	fstp	%st(0)
++	jbe	.L31
++	movl	%ebp, %eax
++	movl	$0, -24(%rsp)
++	notl	%eax
++	andl	%eax, %r9d
++	movl	%r9d, -20(%rsp)
++	.p2align 4,,7
++.L31:
++	movq	-24(%rsp), %rsi
++	movl	-16(%rsp), %edi
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	fldt	-40(%rsp)
++	popq	%rbx
++	popq	%rbp
++	ret
++	.p2align 4,,7
++.L2:
++	cmpl	$62, %r8d
++	jle	.L45
++.L44:
++	ffreep	%st(0)
++.L17:
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	fldt	-40(%rsp)
++	popq	%rbx
++	popq	%rbp
++	ret
++	.p2align 4,,7
++.L45:
++	movl	-24(%rsp), %edx
++	leal	1(%r8), %ecx
++	movq	$-1, %rbx
++	movq	%rsi, -40(%rsp)
++	movl	%edi, -32(%rsp)
++	shrq	%cl, %rbx
++	mov	%edx, %r9d
++	testq	%rbx, %r9
++	fldt	-40(%rsp)
++	je	.L42
++	ffreep	%st(0)
++	testb	$-128, -15(%rsp)
++	je	.L20
++	cmpl	$31, %r8d
++	je	.L36
++	movl	$63, %ecx
++	movl	$1, %eax
++	subl	%r8d, %ecx
++	salq	%cl, %rax
++	leal	(%rdx,%rax), %eax
++	movl	%eax, -24(%rsp)
++	mov	%eax, %eax
++	cmpq	%r9, %rax
++	jae	.L20
++.L36:
++	movl	-20(%rsp), %eax
++	leal	1(%rax), %ecx
++	cmpl	%eax, %ecx
++	jae	.L34
++	leal	1(%r10), %edx
++	movl	%r11d, %eax
++	orl	$-2147483648, %ecx
++	andw	$-32768, %ax
++	andw	$32767, %dx
++	orl	%edx, %eax
++	movw	%ax, -16(%rsp)
++.L34:
++	movl	%ecx, -20(%rsp)
++	.p2align 4,,7
++.L20:
++	faddl	.LC0(%rip)
++	fldz
++	fxch	%st(1)
++	fucomip	%st(1), %st
++	fstp	%st(0)
++	jbe	.L31
++	movl	%ebx, %eax
++	notl	%eax
++	andl	%eax, -24(%rsp)
++	jmp	.L31
++	.p2align 4,,7
++.L42:
++	fstp	%st(1)
++	popq	%rbx
++	popq	%rbp
++	ret
++	.p2align 4,,7
++.L38:
++	fldl	.LC0(%rip)
++	faddp	%st, %st(1)
++	fldz
++	fxch	%st(1)
++	fucomip	%st(1), %st
++	jbe	.L44
++	testl	%r10d, %r10d
++	jle	.L39
++.L7:
++	testb	$-128, -15(%rsp)
++	je	.L9
++	ffreep	%st(0)
++	flds	.LC2(%rip)
++.L9:
++	fstpt	-40(%rsp)
++	movq	-40(%rsp), %rsi
++	movl	-32(%rsp), %edi
++	movq	%rsi, -24(%rsp)
++	movl	%edi, -16(%rsp)
++	jmp	.L17
++.L39:
++	movl	-24(%rsp), %eax
++	orl	-20(%rsp), %eax
++	je	.L44
++	jmp	.L7
++.LFE17:
++	.size	floorl, .-floorl
++	.section	.eh_frame,"a",@progbits
++.Lframe1:
++	.long	.LECIE1-.LSCIE1
++.LSCIE1:
++	.long	0x0
++	.byte	0x1
++	.string	""
++	.uleb128 0x1
++	.sleb128 -8
++	.byte	0x10
++	.byte	0xc
++	.uleb128 0x7
++	.uleb128 0x8
++	.byte	0x90
++	.uleb128 0x1
++	.p2align 3
++.LECIE1:
++.LSFDE1:
++	.long	.LEFDE1-.LASFDE1
++.LASFDE1:
++	.long	.LASFDE1-.Lframe1
++	.quad	.LFB17
++	.quad	.LFE17-.LFB17
++	.byte	0x4
++	.long	.LCFI0-.LFB17
++	.byte	0xe
++	.uleb128 0x10
++	.byte	0x4
++	.long	.LCFI1-.LCFI0
++	.byte	0xe
++	.uleb128 0x18
++	.byte	0x83
++	.uleb128 0x3
++	.byte	0x86
++	.uleb128 0x2
++	.p2align 3
++.LEFDE1:
++	.ident	"GCC: (GNU) 3.4.4 [FreeBSD] 20050421"
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_isnormal.c qemu-0.7.0/bsd/amd64/s_isnormal.c
+--- qemu-0.7.0/bsd.orig/amd64/s_isnormal.c	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_isnormal.c	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,85 @@
++/*-
++ * Copyright (c) 2003 Mike Barcroft <mike@FreeBSD.org>
++ * Copyright (c) 2002-2004 David Schultz <das@FreeBSD.ORG>
++ * 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.
++ *
++ * $FreeBSD: src/lib/msun/src/s_isnormal.c,v 1.1 2004/07/09 03:32:39 das Exp $
++ */
++
++union IEEEf2bits {
++	float	f;
++	struct {
++		unsigned int	man	:23;
++		unsigned int	exp	:8;
++		unsigned int	sign	:1;
++	} bits;
++};
++
++union IEEEd2bits {
++	double	d;
++	struct {
++		unsigned int	manl	:32;
++		unsigned int	manh	:20;
++		unsigned int	exp	:11;
++		unsigned int	sign	:1;
++	} bits;
++};
++
++union IEEEl2bits {
++	long double	e;
++	struct {
++		unsigned int	manl	:32;
++		unsigned int	manh	:32;
++		unsigned int	exp	:15;
++		unsigned int	sign	:1;
++		unsigned int	junk	:16;
++	} bits;
++};
++
++int
++__isnormal(double d)
++{
++	union IEEEd2bits u;
++
++	u.d = d;
++	return (u.bits.exp != 0 && u.bits.exp != 2047);
++}
++
++int
++__isnormalf(float f)
++{
++	union IEEEf2bits u;
++
++	u.f = f;
++	return (u.bits.exp != 0 && u.bits.exp != 255);
++}
++
++int
++__isnormall(long double e)
++{
++	union IEEEl2bits u;
++
++	u.e = e;
++	return (u.bits.exp != 0 && u.bits.exp != 32767);
++}
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_llrint.S qemu-0.7.0/bsd/amd64/s_llrint.S
+--- qemu-0.7.0/bsd.orig/amd64/s_llrint.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_llrint.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,6 @@
++#include <machine/asm.h>
++__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrint.S,v 1.1 2005/01/15 03:32:28 das Exp $")
++	
++/* sizeof(long) == sizeof(long long) */
++#define	fn	llrint
++#include "s_lrint.S"
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_llrintf.S qemu-0.7.0/bsd/amd64/s_llrintf.S
+--- qemu-0.7.0/bsd.orig/amd64/s_llrintf.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_llrintf.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,6 @@
++#include <machine/asm.h>
++__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrintf.S,v 1.1 2005/04/16 21:12:55 das Exp $")
++	
++/* sizeof(long) == sizeof(long long) */
++#define	fn	llrintf
++#include "s_lrintf.S"
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_llrintl.S qemu-0.7.0/bsd/amd64/s_llrintl.S
+--- qemu-0.7.0/bsd.orig/amd64/s_llrintl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_llrintl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,35 @@
++/* Round argument to nearest integral value according to current rounding
++   direction.
++   Copyright (C) 1997, 2002 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++	.text
++ENTRY(__llrintl)
++	fldt	8(%rsp)
++	fistpll	-8(%rsp)
++	fwait
++	movq	-8(%rsp),%rax
++	ret
++END(__llrintl)
++weak_alias (__llrintl, llrintl)
++strong_alias (__llrintl, __lrintl)
++weak_alias (__llrintl, lrintl)
++	
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_lrint.S qemu-0.7.0/bsd/amd64/s_lrint.S
+--- qemu-0.7.0/bsd.orig/amd64/s_lrint.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_lrint.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,36 @@
++/*-
++ * Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
++ * 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 <machine/asm.h>
++
++#ifndef fn
++__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrint.S,v 1.1 2005/01/15 03:32:28 das Exp $")
++#define	fn	lrint
++#endif
++
++ENTRY(fn)
++	cvtsd2si %xmm0, %rax
++	ret
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_lrintf.S qemu-0.7.0/bsd/amd64/s_lrintf.S
+--- qemu-0.7.0/bsd.orig/amd64/s_lrintf.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_lrintf.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,36 @@
++/*-
++ * Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
++ * 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 <machine/asm.h>
++
++#ifndef fn
++__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrintf.S,v 1.1 2005/04/16 21:12:55 das Exp $")
++#define	fn	lrintf
++#endif
++
++ENTRY(fn)
++	cvtss2si %xmm0, %rax
++	ret
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_lrintl.S qemu-0.7.0/bsd/amd64/s_lrintl.S
+--- qemu-0.7.0/bsd.orig/amd64/s_lrintl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_lrintl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1 @@
++/* Not needed, see s_llrintl.S.  */
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_rintl.c qemu-0.7.0/bsd/amd64/s_rintl.c
+--- qemu-0.7.0/bsd.orig/amd64/s_rintl.c	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_rintl.c	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,18 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
++ * Public domain.
++ */
++
++#include <sysdep.h>
++
++long double
++__rintl (long double x)
++{
++  long double res;
++
++  asm ("frndint" : "=t" (res) : "0" (x));
++  return res;
++}
++
++weak_alias (__rintl, rintl)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_round.c qemu-0.7.0/bsd/amd64/s_round.c
+--- qemu-0.7.0/bsd.orig/amd64/s_round.c	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_round.c	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,51 @@
++/*-
++ * Copyright (c) 2003, Steven G. Kargl
++ * 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 unmodified, 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 ``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 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: src/lib/msun/src/s_round.c,v 1.3 2005/01/13 15:43:41 das Exp $");
++
++#include <math.h>
++
++double
++round(double x)
++{
++	double t;
++
++	if (!isfinite(x))
++		return (x);
++
++	if (x >= 0.0) {
++		t = ceil(x);
++		if (t - x > 0.5)
++			t -= 1.0;
++		return (t);
++	} else {
++		t = ceil(-x);
++		if (t + x > 0.5)
++			t -= 1.0;
++		return (-t);
++	}
++}
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_sinl.S qemu-0.7.0/bsd/amd64/s_sinl.S
+--- qemu-0.7.0/bsd.orig/amd64/s_sinl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_sinl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,31 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++ENTRY(__sinl)
++	fldt	8(%rsp)
++	fsin
++	fnstsw	%ax
++	testl	$0x400,%eax
++	jnz	1f
++	ret
++	.align ALIGNARG(4)
++1:	fldpi
++	fadd	%st(0)
++	fxch	%st(1)
++2:	fprem1
++	fnstsw	%ax
++	testl	$0x400,%eax
++	jnz	2b
++	fstp	%st(1)
++	fsin
++	ret
++END (__sinl)
++weak_alias (__sinl, sinl)
+diff -Nru qemu-0.7.0/bsd.orig/amd64/s_tanl.S qemu-0.7.0/bsd/amd64/s_tanl.S
+--- qemu-0.7.0/bsd.orig/amd64/s_tanl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/amd64/s_tanl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,34 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++RCSID("$NetBSD: $")
++
++ENTRY(__tanl)
++	fldt	8(%rsp)
++	fptan
++	fnstsw	%ax
++	testl	$0x400,%eax
++	jnz	1f
++	fstp	%st(0)
++	ret
++1:	fldpi
++	fadd	%st(0)
++	fxch	%st(1)
++2:	fprem1
++	fstsw	%ax
++	testl	$0x400,%eax
++	jnz	2b
++	fstp	%st(1)
++	fptan
++	fstp	%st(0)
++	ret
++END (__tanl)
++weak_alias (__tanl, tanl)
+diff -Nru qemu-0.7.0/bsd.orig/i386/e_atan2l.c qemu-0.7.0/bsd/i386/e_atan2l.c
+--- qemu-0.7.0/bsd.orig/i386/e_atan2l.c	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/i386/e_atan2l.c	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,20 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <sysdep.h>
++
++long double
++__ieee754_atan2l (long double y, long double x)
++{
++  long double res;
++
++  asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)");
++
++  return res;
++}
++
++weak_alias(__ieee754_atan2l, atan2l)
+diff -Nru qemu-0.7.0/bsd.orig/i386/e_logl.S qemu-0.7.0/bsd/i386/e_logl.S
+--- qemu-0.7.0/bsd.orig/i386/e_logl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/i386/e_logl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,63 @@
++/*
++ * Written by J.T. Conklin <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++RCSID("$NetBSD: $")
++
++
++#ifdef __ELF__
++	.section .rodata
++#else
++	.text
++#endif
++	.align ALIGNARG(4)
++	ASM_TYPE_DIRECTIVE(one,@object)
++one:	.double 1.0
++	ASM_SIZE_DIRECTIVE(one)
++	/* It is not important that this constant is precise.  It is only
++	   a value which is known to be on the safe side for using the
++	   fyl2xp1 instruction.  */
++	ASM_TYPE_DIRECTIVE(limit,@object)
++limit:	.double 0.29
++	ASM_SIZE_DIRECTIVE(limit)
++
++
++#ifdef PIC
++#define MO(op) op##@GOTOFF(%edx)
++#else
++#define MO(op) op
++#endif
++
++	.text
++ENTRY(__ieee754_logl)
++	fldln2			// log(2)
++	fldt	4(%esp)		// x : log(2)
++#ifdef PIC
++	call	1f
++1:	popl	%edx
++	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
++#endif
++	fld	%st		// x : x : log(2)
++	fsubl	MO(one)		// x-1 : x : log(2)
++	fld	%st		// x-1 : x-1 : x : log(2)
++	fabs			// |x-1| : x-1 : x : log(2)
++	fcompl	MO(limit)	// x-1 : x : log(2)
++	fnstsw			// x-1 : x : log(2)
++	andb	$0x45, %ah
++	jz	2f
++	fstp	%st(1)		// x-1 : log(2)
++	fyl2xp1			// log(x)
++	ret
++
++2:	fstp	%st(0)		// x : log(2)
++	fyl2x			// log(x)
++	ret
++END (__ieee754_logl)
++
++weak_alias(__ieee754_logl,logl)
+diff -Nru qemu-0.7.0/bsd.orig/i386/e_powl.S qemu-0.7.0/bsd/i386/e_powl.S
+--- qemu-0.7.0/bsd.orig/i386/e_powl.S	Wed Dec 31 19:00:00 1969
++++ qemu-0.7.0/bsd/i386/e_powl.S	Fri Apr 29 02:11:27 2005
+@@ -0,0 +1,341 @@
++/* ix87 specific implementation of pow function.
++   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004
++   Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++#ifdef __ELF__
++	.section .rodata
++#else
++	.text
++#endif
++
++	.align ALIGNARG(4)
++	ASM_TYPE_DIRECTIVE(infinity,@object)
++inf_zero:
++infinity:
++	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
++	ASM_SIZE_DIRECTIVE(infinity)
++	ASM_TYPE_DIRECTIVE(zero,@object)
++zero:	.double 0.0
++	ASM_SIZE_DIRECTIVE(zero)
++	ASM_TYPE_DIRECTIVE(minf_mzero,@object)
++minf_mzero:
++minfinity:
++	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
++mzero:
++	.byte 0, 0, 0, 0, 0, 0, 0, 0x80
++	ASM_SIZE_DIRECTIVE(minf_mzero)
++	ASM_TYPE_DIRECTIVE(one,@object)
++one:	.double 1.0
++	ASM_SIZE_DIRECTIVE(one)
++	ASM_TYPE_DIRECTIVE(limit,@object)
++limit:	.double 0.29
++	ASM_SIZE_DIRECTIVE(limit)
++	ASM_TYPE_DIRECTIVE(p63,@object)
++p63:	.byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43
++	ASM_SIZE_DIRECTIVE(p63)
++
++#ifdef PIC
++#define MO(op) op##@GOTOFF(%ecx)
++#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
++#else
++#define MO(op) op
++#define MOX(op,x,f) op(,x,f)
++#endif
++
++	.text
++ENTRY(__ieee754_powl)
++	fldt	16(%esp)	// y
++	fxam
++
++#ifdef	PIC
++	call	1f
++1:	popl	%ecx
++	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
++#endif
++
++	fnstsw
++	movb	%ah, %dl
++	andb	$0x45, %ah
++	cmpb	$0x40, %ah	// is y == 0 ?
++	je	11f
++
++	cmpb	$0x05, %ah	// is y == ±inf ?
++	je	12f
++
++	cmpb	$0x01, %ah	// is y == NaN ?
++	je	30f
++
++	fldt	4(%esp)		// x : y
++
++	subl	$8,%esp
++
++	fxam
++	fnstsw
++	movb	%ah, %dh
++	andb	$0x45, %ah
++	cmpb	$0x40, %ah
++	je	20f		// x is ±0
++
++	cmpb	$0x05, %ah
++	je	15f		// x is ±inf
++
++	fxch			// y : x
++
++	/* fistpll raises invalid exception for |y| >= 1L<<63.  */
++	fld	%st		// y : y : x
++	fabs			// |y| : y : x
++	fcompl	MO(p63)		// y : x
++	fnstsw
++	sahf
++	jnc	2f
++
++	/* First see whether `y' is a natural number.  In this case we
++	   can use a more precise algorithm.  */
++	fld	%st		// y : y : x
++	fistpll	(%esp)		// y : x
++	fildll	(%esp)		// int(y) : y : x
++	fucomp	%st(1)		// y : x
++	fnstsw
++	sahf
++	jne	2f
++
++	/* OK, we have an integer value for y.  */
++	popl	%eax
++	popl	%edx
++	orl	$0, %edx
++	fstp	%st(0)		// x
++	jns	4f		// y >= 0, jump
++	fdivrl	MO(one)		// 1/x		(now referred to as x)
++	negl	%eax
++	adcl	$0, %edx
++	negl	%edx
++4:	fldl	MO(one)		// 1 : x
++	fxch
++
++6:	shrdl	$1, %edx, %eax
++	jnc	5f
++	fxch
++	fmul	%st(1)		// x : ST*x
++	fxch
++5:	fmul	%st(0), %st	// x*x : ST*x
++	shrl	$1, %edx
++	movl	%eax, %ecx
++	orl	%edx, %ecx
++	jnz	6b
++	fstp	%st(0)		// ST*x
++	ret
++
++	/* y is ±NAN */
++30:	fldt	4(%esp)		// x : y
++	fldl	MO(one)		// 1.0 : x : y
++	fucomp	%st(1)		// x : y
++	fnstsw
++	sahf
++	je	31f
++	fxch			// y : x
++31:	fstp	%st(1)
++	ret
++
++	.align ALIGNARG(4)
++2:	/* y is a real number.  */
++	fxch			// x : y
++	fldl	MO(one)		// 1.0 : x : y
++	fld	%st(1)		// x : 1.0 : x : y
++	fsub	%st(1)		// x-1 : 1.0 : x : y
++	fabs			// |x-1| : 1.0 : x : y
++	fcompl	MO(limit)	// 1.0 : x : y
++	fnstsw
++	fxch			// x : 1.0 : y
++	sahf
++	
Comment 1 Norikatsu Shigemura freebsd_committer freebsd_triage 2005-05-01 08:39:37 UTC
State Changed
From-To: open->closed

Committed, thanks!