From owner-freebsd-emulation@FreeBSD.ORG Fri Apr 29 07:13:33 2005 Return-Path: Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AD76116A4CE; Fri, 29 Apr 2005 07:13:33 +0000 (GMT) Received: from anuket.mj.niksun.com (gwnew.niksun.com [65.115.46.162]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9A06643D5A; Fri, 29 Apr 2005 07:13:29 +0000 (GMT) (envelope-from jkim@niksun.com) Received: from [10.70.0.244] (daemon.mj.niksun.com [10.70.0.244]) by anuket.mj.niksun.com (8.13.1/8.13.1) with ESMTP id j3T7E2Y1067679; Fri, 29 Apr 2005 03:14:04 -0400 (EDT) (envelope-from jkim@niksun.com) From: Jung-uk Kim Organization: Niksun, Inc. To: freebsd-amd64@freebsd.org Date: Fri, 29 Apr 2005 03:13:15 -0400 User-Agent: KMail/1.6.2 References: <20050427210405.A95072@saturn.kn-bremen.de> <20050428210246.A21966@saturn.kn-bremen.de> <200504281514.01411.jkim@niksun.com> In-Reply-To: <200504281514.01411.jkim@niksun.com> MIME-Version: 1.0 Content-Disposition: inline Content-Type: Multipart/Mixed; boundary="Boundary-00=_M6dcCGxTk+H4CWI" Message-Id: <200504290313.18498.jkim@niksun.com> X-Virus-Scanned: ClamAV version 0.83, clamav-milter version 0.83 on anuket.mj.niksun.com X-Virus-Status: Clean cc: freebsd-emulation@freebsd.org cc: Juergen Lock Subject: Re: please test qemu port update X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Apr 2005 07:13:33 -0000 --Boundary-00=_M6dcCGxTk+H4CWI Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Thursday 28 April 2005 03:14 pm, Jung-uk Kim wrote: > On Thursday 28 April 2005 03:02 pm, Juergen Lock wrote: > > On Wed, Apr 27, 2005 at 07:36:18PM -0400, Jung-uk Kim wrote: > > > On Wednesday 27 April 2005 03:04 pm, Juergen Lock wrote: > > > > With the help of Jung-uk Kim i have made an update for the > > > > qemu port that might :) now actually work on amd64 as well. > > > > Please test. (I also haven't tested 4.11 or 6.0 i386.) > > > > > > > > remove these files: files/patch-ab, > > > > files/patch-target-sparc::op_helper.c > > > > > > > > (btw I'm not subscribed on -amd64 so if you remove > > > > -emulation please Cc me if you want me to see followups...) > > > > > > ---- >8 --- SNIP!!! --- >8 ---- > > > > > > Juergen, > > > > > > sorry but it doesn't work. You missed few things in Makefile. > > > Since QEMU 0.7.0 is released, I think it's good time to update > > > it, too. ;-) Update to QEMU 0.7.0 and Makefile fix is attached. > > > > Hmm I wonder why the Makefile worked for me... Do you have > > unusual things in your environment or in make.conf? > > No. > > > Or is this a difference between i386 and amd64? > > I believe Makefile.target is doing something wrong but I haven't > found it yet. I believe the culprit is Makefile.target not > checking ARCH == amd64 but x86_64. In fact, it works perfect for > i386. Yup, that's it. MAKE_ENV was overriding ARCH==x86_64 in QEMU's makefiles. > > And if it really is, I would prefer setting the right variables > > (like USE_GMAKE, see /usr/ports/Mk/bsd.port.mk) instead of simply > > overriding the do-* targets. > > I'd love to find it out. I will let you know when I get that > right. The final patch (I hope) is attached. This version includes few minor fixes too. I think it is commitable now. Thanks, Jung-uk Kim > Thanks, > > JK > > > Juergen --Boundary-00=_M6dcCGxTk+H4CWI Content-Type: text/x-diff; charset="iso-8859-1"; name="qemu-port.diff" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="qemu-port.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 29 Apr 2005 06:32:57 -0000 @@ -6,43 +6,55 @@ # 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(WITHOUT_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 -.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 +.endif .else USE_GCC= 3.4 .endif +pre-everything:: +.if !defined(WITHOUT_SAMBA) + @${ECHO_MSG} "Notice: if you don't need qemu's -smb option (smb-export local dir to guest)" + @${ECHO_MSG} "then you can omit this port's samba dependency by defining WITHOUT_SAMBA." +.endif + +pre-patch: + @for A in ${ONLY_FOR_ARCHS}; do \ + ${MKDIR} ${WRKSRC}/bsd/$$A; \ + done + post-install: @${CAT} ${PKGMESSAGE} 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 -+/*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 -+#include -+#include -+#include -+#include -+#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, §orsize) && -+ 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 --#include - #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 ++#if defined(__FreeBSD__) && __FreeBSD_version < 500000 ++#include ++#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 +-#if defined(_BSD) && !defined(__APPLE__) ++#if defined(_BSD) && !defined(__APPLE__) && \ ++ (!defined(__FreeBSD__) || __FreeBSD_version < 500000) + #include ++#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 + #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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++ ++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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ * Adapted for x86-64 by Andreas Jaeger . ++ */ ++ ++#include ++#include ++ ++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 , 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 ++#include ++ ++#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 // ++ 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 // ++ 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 // ++ 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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ * Adapted for x86-64 by Andreas Jaeger . ++ */ ++ ++#include ++#include ++ ++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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++ ++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 ++ ++__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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ * Adapted for x86-64 by Andreas Jaeger . ++ */ ++ ++#include ++#include ++ ++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 ++ ++__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 ++ * Copyright (c) 2002-2004 David Schultz ++ * 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 ++__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 ++__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 ++#include ++ ++ .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 ++ * 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 ++ ++#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 ++ * 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 ++ ++#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 . ++ * Changes for long double by Ulrich Drepper ++ * Public domain. ++ */ ++ ++#include ++ ++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 ++__FBSDID("$FreeBSD: src/lib/msun/src/s_round.c,v 1.3 2005/01/13 15:43:41 das Exp $"); ++ ++#include ++ ++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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ * Adapted for x86-64 by Andreas Jaeger . ++ */ ++ ++#include ++#include ++ ++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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ * Adapted for x86-64 by Andreas Jaeger . ++ */ ++ ++#include ++#include ++ ++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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++ ++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 . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++#include ++ ++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 , 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 ++#include ++ ++#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 ++ ja 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)) ++ addl $8, %esp ++ 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) ++ addl $8, %esp ++ 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 4(%esp) // 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 ++ fldl MOX(inf_zero, %edx, 4) ++ ret ++ ++ .align ALIGNARG(4) ++14: fldl MO(one) ++ ret ++ ++ .align ALIGNARG(4) ++13: fldt 4(%esp) // 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 (%esp) // y ++ fildll (%esp) // int(y) : y ++ fucompp // ++ fnstsw ++ sahf ++ jne 17f ++ ++ // OK, the value is an integer, but is it odd? ++ popl %eax ++ popl %edx ++ andb $1, %al ++ jz 18f // jump if not odd ++ // It's an odd integer. ++ shrl $31, %edx ++ fldl MOX(minf_mzero, %edx, 8) ++ ret ++ ++ .align ALIGNARG(4) ++16: fcompl MO(zero) ++ addl $8, %esp ++ fnstsw ++ shrl $5, %eax ++ andl $8, %eax ++ fldl MOX(inf_zero, %eax, 1) ++ ret ++ ++ .align ALIGNARG(4) ++17: shll $30, %edx // sign bit for y in right position ++ addl $8, %esp ++18: shrl $31, %edx ++ fldl MOX(inf_zero, %edx, 8) ++ 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 (%esp) // y ++ fildll (%esp) // int(y) : y ++ fucompp // ++ fnstsw ++ sahf ++ jne 26f ++ ++ // OK, the value is an integer, but is it odd? ++ popl %eax ++ popl %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: addl $8, %esp ++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 (%esp) // y ++ fildll (%esp) // int(y) : y ++ fucompp // ++ fnstsw ++ sahf ++ jne 23f ++ ++ // OK, the value is an integer, but is it odd? ++ popl %eax ++ popl %edx ++ andb $1, %al ++ jz 24f // jump if not odd ++ // It's an odd integer. ++ fldl MO(mzero) ++ ret ++ ++22: fstp %st(0) ++23: addl $8, %esp // Don't use 2 x pop ++24: fldl MO(zero) ++ ret ++ ++END(__ieee754_powl) ++ ++weak_alias(__ieee754_powl,powl) +diff -Nru qemu-0.7.0/bsd.orig/i386/e_remainderl.S qemu-0.7.0/bsd/i386/e_remainderl.S +--- qemu-0.7.0/bsd.orig/i386/e_remainderl.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/e_remainderl.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,24 @@ ++/* ++ * Written by J.T. Conklin . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++#include ++ ++RCSID("$NetBSD: $") ++ ++ENTRY(__ieee754_remainderl) ++ fldt 16(%esp) ++ fldt 4(%esp) ++1: fprem1 ++ fstsw %ax ++ sahf ++ jp 1b ++ fstp %st(1) ++ ret ++END (__ieee754_remainderl) ++ ++weak_alias(__ieee754_remainderl,remainderl) +diff -Nru qemu-0.7.0/bsd.orig/i386/e_sqrtl.c qemu-0.7.0/bsd/i386/e_sqrtl.c +--- qemu-0.7.0/bsd.orig/i386/e_sqrtl.c Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/e_sqrtl.c Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,20 @@ ++/* ++ * Written by J.T. Conklin . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++ ++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/i386/s_ceill.S qemu-0.7.0/bsd/i386/s_ceill.S +--- qemu-0.7.0/bsd.orig/i386/s_ceill.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_ceill.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,27 @@ ++/* ++ * Based on code written by J.T. Conklin . ++ * Public domain. ++ */ ++ ++#include ++RCSID("$FreeBSD: src/lib/msun/i387/s_ceill.S,v 1.1 2005/04/16 21:12:55 das Exp $") ++ ++ENTRY(ceill) ++ pushl %ebp ++ movl %esp,%ebp ++ subl $8,%esp ++ ++ fstcw -4(%ebp) /* store fpu control word */ ++ movw -4(%ebp),%dx ++ orw $0x0800,%dx /* round towards +oo */ ++ andw $0xfbff,%dx ++ movw %dx,-8(%ebp) ++ fldcw -8(%ebp) /* load modfied control word */ ++ ++ fldt 8(%ebp) /* round */ ++ frndint ++ ++ fldcw -4(%ebp) /* restore original control word */ ++ ++ leave ++ ret +diff -Nru qemu-0.7.0/bsd.orig/i386/s_cosl.S qemu-0.7.0/bsd/i386/s_cosl.S +--- qemu-0.7.0/bsd.orig/i386/s_cosl.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_cosl.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,32 @@ ++/* ++ * Written by J.T. Conklin . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++#include ++ ++RCSID("$NetBSD: $") ++ ++ENTRY(__cosl) ++ fldt 4(%esp) ++ 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/i386/s_floorl.S qemu-0.7.0/bsd/i386/s_floorl.S +--- qemu-0.7.0/bsd.orig/i386/s_floorl.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_floorl.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,27 @@ ++/* ++ * Based on code written by J.T. Conklin . ++ * Public domain. ++ */ ++ ++#include ++RCSID("$FreeBSD: src/lib/msun/i387/s_floorl.S,v 1.1 2005/04/16 21:12:55 das Exp $") ++ ++ENTRY(floorl) ++ pushl %ebp ++ movl %esp,%ebp ++ subl $8,%esp ++ ++ fstcw -4(%ebp) /* store fpu control word */ ++ movw -4(%ebp),%dx ++ orw $0x0400,%dx /* round towards -oo */ ++ andw $0xf7ff,%dx ++ movw %dx,-8(%ebp) ++ fldcw -8(%ebp) /* load modfied control word */ ++ ++ fldt 8(%ebp) /* round */ ++ frndint ++ ++ fldcw -4(%ebp) /* restore original control word */ ++ ++ leave ++ ret +diff -Nru qemu-0.7.0/bsd.orig/i386/s_isnormal.c qemu-0.7.0/bsd/i386/s_isnormal.c +--- qemu-0.7.0/bsd.orig/i386/s_isnormal.c Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_isnormal.c Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,85 @@ ++/*- ++ * Copyright (c) 2003 Mike Barcroft ++ * Copyright (c) 2002-2004 David Schultz ++ * 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/i386/s_llrint.S qemu-0.7.0/bsd/i386/s_llrint.S +--- qemu-0.7.0/bsd.orig/i386/s_llrint.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_llrint.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,36 @@ ++/*- ++ * Copyright (c) 2005 David Schultz ++ * 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 ++RCSID("$FreeBSD: src/lib/msun/i387/s_llrint.S,v 1.1 2005/01/11 23:10:53 das Exp $"); ++ ++ENTRY(llrint) ++ fldl 4(%esp) ++ subl $8,%esp ++ fistpll (%esp) ++ popl %eax ++ popl %edx ++ ret +diff -Nru qemu-0.7.0/bsd.orig/i386/s_llrintf.S qemu-0.7.0/bsd/i386/s_llrintf.S +--- qemu-0.7.0/bsd.orig/i386/s_llrintf.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_llrintf.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,36 @@ ++/*- ++ * Copyright (c) 2005 David Schultz ++ * 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 ++RCSID("$FreeBSD: src/lib/msun/i387/s_llrintf.S,v 1.1 2005/04/16 21:12:55 das Exp $") ++ ++ENTRY(llrintf) ++ flds 4(%esp) ++ subl $8,%esp ++ fistpll (%esp) ++ popl %eax ++ popl %edx ++ ret +diff -Nru qemu-0.7.0/bsd.orig/i386/s_llrintl.S qemu-0.7.0/bsd/i386/s_llrintl.S +--- qemu-0.7.0/bsd.orig/i386/s_llrintl.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/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 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Ulrich Drepper , 1997. ++ ++ 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 ++#include ++ ++ .text ++ENTRY(__llrintl) ++ fldt 4(%esp) ++ subl $8, %esp ++ fistpll (%esp) ++ fwait ++ popl %eax ++ popl %edx ++ ret ++END(__llrintl) ++weak_alias (__llrintl, llrintl) +diff -Nru qemu-0.7.0/bsd.orig/i386/s_lrint.S qemu-0.7.0/bsd/i386/s_lrint.S +--- qemu-0.7.0/bsd.orig/i386/s_lrint.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_lrint.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,35 @@ ++/*- ++ * Copyright (c) 2005 David Schultz ++ * 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 ++RCSID("$FreeBSD: src/lib/msun/i387/s_lrint.S,v 1.1 2005/01/11 23:10:53 das Exp $"); ++ ++ENTRY(lrint) ++ fldl 4(%esp) ++ subl $4,%esp ++ fistpl (%esp) ++ popl %eax ++ ret +diff -Nru qemu-0.7.0/bsd.orig/i386/s_lrintf.S qemu-0.7.0/bsd/i386/s_lrintf.S +--- qemu-0.7.0/bsd.orig/i386/s_lrintf.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_lrintf.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,35 @@ ++/*- ++ * Copyright (c) 2005 David Schultz ++ * 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 ++RCSID("$FreeBSD: src/lib/msun/i387/s_lrintf.S,v 1.1 2005/04/16 21:12:55 das Exp $") ++ ++ENTRY(lrintf) ++ flds 4(%esp) ++ subl $4,%esp ++ fistpl (%esp) ++ popl %eax ++ ret +diff -Nru qemu-0.7.0/bsd.orig/i386/s_lrintl.S qemu-0.7.0/bsd/i386/s_lrintl.S +--- qemu-0.7.0/bsd.orig/i386/s_lrintl.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_lrintl.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,34 @@ ++/* Round argument to nearest integral value according to current rounding ++ direction. ++ Copyright (C) 1997 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Ulrich Drepper , 1997. ++ ++ 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 ++#include ++ ++ .text ++ENTRY(__lrintl) ++ fldt 4(%esp) ++ subl $4, %esp ++ fistpl (%esp) ++ fwait ++ popl %eax ++ ret ++END(__lrintl) ++weak_alias (__lrintl, lrintl) +diff -Nru qemu-0.7.0/bsd.orig/i386/s_rintl.c qemu-0.7.0/bsd/i386/s_rintl.c +--- qemu-0.7.0/bsd.orig/i386/s_rintl.c Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_rintl.c Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,18 @@ ++/* ++ * Written by J.T. Conklin . ++ * Changes for long double by Ulrich Drepper ++ * Public domain. ++ */ ++ ++#include ++ ++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/i386/s_round.c qemu-0.7.0/bsd/i386/s_round.c +--- qemu-0.7.0/bsd.orig/i386/s_round.c Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/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 ++__FBSDID("$FreeBSD: src/lib/msun/src/s_round.c,v 1.3 2005/01/13 15:43:41 das Exp $"); ++ ++#include ++ ++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/i386/s_sinl.S qemu-0.7.0/bsd/i386/s_sinl.S +--- qemu-0.7.0/bsd.orig/i386/s_sinl.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_sinl.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,32 @@ ++/* ++ * Written by J.T. Conklin . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++#include ++ ++RCSID("$NetBSD: $") ++ ++ENTRY(__sinl) ++ fldt 4(%esp) ++ 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/i386/s_tanl.S qemu-0.7.0/bsd/i386/s_tanl.S +--- qemu-0.7.0/bsd.orig/i386/s_tanl.S Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/i386/s_tanl.S Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,33 @@ ++/* ++ * Written by J.T. Conklin . ++ * Public domain. ++ * ++ * Adapted for `long double' by Ulrich Drepper . ++ */ ++ ++#include ++#include ++ ++RCSID("$NetBSD: $") ++ ++ENTRY(__tanl) ++ fldt 4(%esp) ++ 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/sysdep.h qemu-0.7.0/bsd/sysdep.h +--- qemu-0.7.0/bsd.orig/sysdep.h Wed Dec 31 19:00:00 1969 ++++ qemu-0.7.0/bsd/sysdep.h Fri Apr 29 02:11:27 2005 +@@ -0,0 +1,20 @@ ++#ifndef _QEMU_BSD_SYSDEP_H_ ++#define _QEMU_BSD_SYSDEP_H_ ++ ++#include ++ ++#define HAVE_ELF ++ ++#ifdef __ASSEMBLER__ ++#define ALIGNARG(log2) 1<