aboutsummaryrefslogtreecommitdiff
path: root/emulators/qemu
diff options
context:
space:
mode:
authorNorikatsu Shigemura <nork@FreeBSD.org>2005-05-03 04:02:46 +0000
committerNorikatsu Shigemura <nork@FreeBSD.org>2005-05-03 04:02:46 +0000
commit230fca0f1f814f683104079fa7e7126e0deb3b98 (patch)
treeadae5ccf0d2856e7ab2bfa95e833e3f40840312b /emulators/qemu
parentcf5c3f74c642eb3f4678b6b8c16f447595356cbe (diff)
downloadports-230fca0f1f814f683104079fa7e7126e0deb3b98.tar.gz
ports-230fca0f1f814f683104079fa7e7126e0deb3b98.zip
Notes
Diffstat (limited to 'emulators/qemu')
-rw-r--r--emulators/qemu/Makefile1
-rw-r--r--emulators/qemu/files/patch-fbsd141
-rw-r--r--emulators/qemu/files/patch-libmath2524
3 files changed, 2666 insertions, 0 deletions
diff --git a/emulators/qemu/Makefile b/emulators/qemu/Makefile
index 8d31b2da7e38..6d1a7c1a4c54 100644
--- a/emulators/qemu/Makefile
+++ b/emulators/qemu/Makefile
@@ -7,6 +7,7 @@
PORTNAME= qemu
PORTVERSION= 0.7.0
+POTREVISION= 1
CATEGORIES= emulators
MASTER_SITES= http://www.qemu.org/
diff --git a/emulators/qemu/files/patch-fbsd b/emulators/qemu/files/patch-fbsd
new file mode 100644
index 000000000000..dab1f93fc8a0
--- /dev/null
+++ b/emulators/qemu/files/patch-fbsd
@@ -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: */
diff --git a/emulators/qemu/files/patch-libmath b/emulators/qemu/files/patch-libmath
new file mode 100644
index 000000000000..08ba92fdb6c8
--- /dev/null
+++ b/emulators/qemu/files/patch-libmath
@@ -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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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
++ 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 // <empty>
++ 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 // <empty>
++ 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 // <empty>
++ 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 <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++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 <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/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 <jtc@NetBSD.org>.
++ * Public domain.
++ */
++
++#include <machine/asm.h>
++RCSID("$FreeBSD: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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 <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++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 <jtc@NetBSD.org>.
++ * Public domain.
++ */
++
++#include <machine/asm.h>
++RCSID("$FreeBSD: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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 <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: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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 <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>
++RCSID("$FreeBSD: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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 <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>
++RCSID("$FreeBSD: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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 <drepper@cygnus.com>, 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 <machine/asm.h>
++#include <sysdep.h>
++
++ .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 <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>
++RCSID("$FreeBSD: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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 <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>
++RCSID("$FreeBSD: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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 <drepper@cygnus.com>, 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 <machine/asm.h>
++#include <sysdep.h>
++
++ .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 <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/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 <sys/cdefs.h>
++__FBSDID("$FreeBSD: /tmp/pcvs/ports/emulators/qemu/files/patch-libmath,v 1.1 2005-05-03 04:02:46 nork 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/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 <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++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 <jtc@netbsd.org>.
++ * Public domain.
++ *
++ * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
++ */
++
++#include <machine/asm.h>
++#include <sysdep.h>
++
++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 <sys/cdefs.h>
++
++#define HAVE_ELF
++
++#ifdef __ASSEMBLER__
++#define ALIGNARG(log2) 1<<log2
++#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
++#define ASM_SIZE_DIRECTIVE(name) .size name,.-name;
++#define END(x)
++#define strong_alias(sym,alias) .set alias,sym;
++#define weak_alias(sym,alias) .weak alias; .equ alias,sym;
++#else
++#define strong_alias(sym,alias) __strong_reference(sym,alias);
++#define weak_alias(sym,alias) __weak_reference(sym,alias);
++#endif
++
++#endif