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+=	-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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun Exp $");
+
+#include <math.h>
+
+double
+round(double x)
+{
+	double t;
+
+	if (!isfinite(x))
+		return (x);
+
+	if (x >= 0.0) {
+		t = floor(x);
+		if (t - x <= -0.5)
+			t += 1.0;
+		return (t);
+	} else {
+		t = floor(-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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun 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: ports/emulators/qemu/files/patch-libmath,v 1.3 2006/08/21 23:02:01 shaun Exp $");
+
+#include <math.h>
+
+double
+round(double x)
+{
+	double t;
+
+	if (!isfinite(x))
+		return (x);
+
+	if (x >= 0.0) {
+		t = floor(x);
+		if (t - x <= -0.5)
+			t += 1.0;
+		return (t);
+	} else {
+		t = floor(-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
