diff options
author | Norikatsu Shigemura <nork@FreeBSD.org> | 2005-05-03 04:02:46 +0000 |
---|---|---|
committer | Norikatsu Shigemura <nork@FreeBSD.org> | 2005-05-03 04:02:46 +0000 |
commit | 230fca0f1f814f683104079fa7e7126e0deb3b98 (patch) | |
tree | adae5ccf0d2856e7ab2bfa95e833e3f40840312b /emulators | |
parent | cf5c3f74c642eb3f4678b6b8c16f447595356cbe (diff) | |
download | ports-230fca0f1f814f683104079fa7e7126e0deb3b98.tar.gz ports-230fca0f1f814f683104079fa7e7126e0deb3b98.zip |
o Oops, I forgot to commit 2 patches.
o In some environment, qemu missing 2 patches might be able
to compiled. So I bump PORTREVISION.
Pointed out by: Jung-uk Kim <jkim@niksun.com>
Juergen Lock <nox@jelal.kn-bremen.de> (maintainer)
Mark Treacy <mark.treacy@gmail.com>
pointyhat via kris
Notes
Notes:
svn path=/head/; revision=134523
Diffstat (limited to 'emulators')
-rw-r--r-- | emulators/qemu-devel/Makefile | 1 | ||||
-rw-r--r-- | emulators/qemu-devel/files/patch-fbsd | 141 | ||||
-rw-r--r-- | emulators/qemu-devel/files/patch-libmath | 2524 | ||||
-rw-r--r-- | emulators/qemu/Makefile | 1 | ||||
-rw-r--r-- | emulators/qemu/files/patch-fbsd | 141 | ||||
-rw-r--r-- | emulators/qemu/files/patch-libmath | 2524 |
6 files changed, 5332 insertions, 0 deletions
diff --git a/emulators/qemu-devel/Makefile b/emulators/qemu-devel/Makefile index 8d31b2da7e38..6d1a7c1a4c54 100644 --- a/emulators/qemu-devel/Makefile +++ b/emulators/qemu-devel/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-devel/files/patch-fbsd b/emulators/qemu-devel/files/patch-fbsd new file mode 100644 index 000000000000..dab1f93fc8a0 --- /dev/null +++ b/emulators/qemu-devel/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-devel/files/patch-libmath b/emulators/qemu-devel/files/patch-libmath new file mode 100644 index 000000000000..d0c4cbaa363c --- /dev/null +++ b/emulators/qemu-devel/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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-devel/files/Attic/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 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 |