mirror of
https://git.planet-casio.com/Lephenixnoir/OpenLibm.git
synced 2024-12-28 04:23:41 +01:00
Initialize repo. FreeBSD 8.2 msun code + some tweaks
This commit is contained in:
commit
aba7ae910f
290 changed files with 25190 additions and 0 deletions
7
README
Normal file
7
README
Normal file
|
@ -0,0 +1,7 @@
|
|||
Openlibm is an effort to have a high quality independent
|
||||
libm library. It is meant to be used standalone in applications and
|
||||
programming language implementations, and perhaps even as a reference
|
||||
for libm implementations in OSes.
|
||||
|
||||
The Openlibm code derives from the FreeBSD 8.2 msun implementation,
|
||||
which in turn derives from FDLIBM 5.3.
|
24
amd64/FILES
Normal file
24
amd64/FILES
Normal file
|
@ -0,0 +1,24 @@
|
|||
Makefile.inc
|
||||
Symbol.map
|
||||
e_remainder.S
|
||||
e_remainderf.S
|
||||
e_remainderl.S
|
||||
e_sqrt.S
|
||||
e_sqrtf.S
|
||||
e_sqrtl.S
|
||||
fenv.c
|
||||
fenv.h
|
||||
s_llrint.S
|
||||
s_llrintf.S
|
||||
s_llrintl.S
|
||||
s_logbl.S
|
||||
s_lrint.S
|
||||
s_lrintf.S
|
||||
s_lrintl.S
|
||||
s_remquo.S
|
||||
s_remquof.S
|
||||
s_remquol.S
|
||||
s_rintl.S
|
||||
s_scalbn.S
|
||||
s_scalbnf.S
|
||||
s_scalbnl.S
|
10
amd64/Makefile.inc
Normal file
10
amd64/Makefile.inc
Normal file
|
@ -0,0 +1,10 @@
|
|||
# $FreeBSD: src/lib/msun/amd64/Makefile.inc,v 1.10 2008/03/30 21:21:52 das Exp $
|
||||
|
||||
ARCH_SRCS = e_remainder.S e_remainderf.S e_remainderl.S \
|
||||
e_sqrt.S e_sqrtf.S e_sqrtl.S \
|
||||
s_llrint.S s_llrintf.S s_llrintl.S \
|
||||
s_logbl.S s_lrint.S s_lrintf.S s_lrintl.S \
|
||||
s_remquo.S s_remquof.S s_remquol.S \
|
||||
s_rintl.S s_scalbn.S s_scalbnf.S s_scalbnl.S
|
||||
LDBL_PREC = 64
|
||||
SYM_MAPS += ${.CURDIR}/amd64/Symbol.map
|
14
amd64/Symbol.map
Normal file
14
amd64/Symbol.map
Normal file
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* $FreeBSD: src/lib/msun/amd64/Symbol.map,v 1.2 2007/04/29 14:05:21 deischen Exp $
|
||||
*/
|
||||
FBSD_1.0 {
|
||||
fesetexceptflag;
|
||||
feraiseexcept;
|
||||
fegetenv;
|
||||
feholdexcept;
|
||||
feupdateenv;
|
||||
__feenableexcept;
|
||||
__fedisableexcept;
|
||||
feenableexcept;
|
||||
fedisableexcept;
|
||||
};
|
55
amd64/e_remainder.S
Normal file
55
amd64/e_remainder.S
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on the i387 version written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
RCSID("from: FreeBSD: src/lib/msun/i387/e_remainder.S,v 1.8 2005/02/04 14:08:32 das Exp")
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/e_remainder.S,v 1.2 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(remainder)
|
||||
movsd %xmm0,-8(%rsp)
|
||||
movsd %xmm1,-16(%rsp)
|
||||
fldl -16(%rsp)
|
||||
fldl -8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstpl -8(%rsp)
|
||||
movsd -8(%rsp),%xmm0
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
25
amd64/e_remainderf.S
Normal file
25
amd64/e_remainderf.S
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Based on the i387 version written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
RCSID("from: $NetBSD: e_remainderf.S,v 1.2 1995/05/08 23:49:47 jtc Exp $")
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/e_remainderf.S,v 1.2 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(remainderf)
|
||||
movss %xmm0,-4(%rsp)
|
||||
movss %xmm1,-8(%rsp)
|
||||
flds -8(%rsp)
|
||||
flds -4(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstps -4(%rsp)
|
||||
movss -4(%rsp),%xmm0
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
50
amd64/e_remainderl.S
Normal file
50
amd64/e_remainderl.S
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on the i387 version written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/e_remainderl.S,v 1.2 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(remainderl)
|
||||
fldt 24(%rsp)
|
||||
fldt 8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
36
amd64/e_sqrt.S
Normal file
36
amd64/e_sqrt.S
Normal file
|
@ -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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/e_sqrt.S,v 1.4 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(sqrt)
|
||||
sqrtsd %xmm0, %xmm0
|
||||
ret
|
||||
END(sqrt)
|
||||
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
35
amd64/e_sqrtf.S
Normal file
35
amd64/e_sqrtf.S
Normal file
|
@ -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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/e_sqrtf.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(sqrtf)
|
||||
sqrtss %xmm0, %xmm0
|
||||
ret
|
||||
END(sqrtf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
35
amd64/e_sqrtl.S
Normal file
35
amd64/e_sqrtl.S
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/e_sqrtl.S,v 1.2 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(sqrtl)
|
||||
fldt 8(%rsp)
|
||||
fsqrt
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
149
amd64/fenv.c
Normal file
149
amd64/fenv.c
Normal file
|
@ -0,0 +1,149 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-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.
|
||||
*
|
||||
* $FreeBSD: src/lib/msun/amd64/fenv.c,v 1.5 2010/02/03 20:23:47 kib Exp $
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <machine/fpu.h>
|
||||
#include <fenv.h>
|
||||
|
||||
const fenv_t __fe_dfl_env = {
|
||||
{ 0xffff0000 | __INITIAL_FPUCW__,
|
||||
0xffff0000,
|
||||
0xffffffff,
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff }
|
||||
},
|
||||
__INITIAL_MXCSR__
|
||||
};
|
||||
|
||||
int
|
||||
fesetexceptflag(const fexcept_t *flagp, int excepts)
|
||||
{
|
||||
fenv_t env;
|
||||
|
||||
__fnstenv(&env.__x87);
|
||||
env.__x87.__status &= ~excepts;
|
||||
env.__x87.__status |= *flagp & excepts;
|
||||
__fldenv(env.__x87);
|
||||
|
||||
__stmxcsr(&env.__mxcsr);
|
||||
env.__mxcsr &= ~excepts;
|
||||
env.__mxcsr |= *flagp & excepts;
|
||||
__ldmxcsr(env.__mxcsr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feraiseexcept(int excepts)
|
||||
{
|
||||
fexcept_t ex = excepts;
|
||||
|
||||
fesetexceptflag(&ex, excepts);
|
||||
__fwait();
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fegetenv(fenv_t *envp)
|
||||
{
|
||||
|
||||
__fnstenv(&envp->__x87);
|
||||
__stmxcsr(&envp->__mxcsr);
|
||||
/*
|
||||
* fnstenv masks all exceptions, so we need to restore the
|
||||
* control word to avoid this side effect.
|
||||
*/
|
||||
__fldcw(envp->__x87.__control);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feholdexcept(fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__stmxcsr(&mxcsr);
|
||||
__fnstenv(&envp->__x87);
|
||||
__fnclex();
|
||||
envp->__mxcsr = mxcsr;
|
||||
mxcsr &= ~FE_ALL_EXCEPT;
|
||||
mxcsr |= FE_ALL_EXCEPT << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feupdateenv(const fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
__uint16_t status;
|
||||
|
||||
__fnstsw(&status);
|
||||
__stmxcsr(&mxcsr);
|
||||
fesetenv(envp);
|
||||
feraiseexcept((mxcsr | status) & FE_ALL_EXCEPT);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
__feenableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
__stmxcsr(&mxcsr);
|
||||
omask = (control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control &= ~mask;
|
||||
__fldcw(control);
|
||||
mxcsr &= ~(mask << _SSE_EMASK_SHIFT);
|
||||
__ldmxcsr(mxcsr);
|
||||
return (~omask);
|
||||
}
|
||||
|
||||
int
|
||||
__fedisableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
__stmxcsr(&mxcsr);
|
||||
omask = (control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control |= mask;
|
||||
__fldcw(control);
|
||||
mxcsr |= mask << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
return (~omask);
|
||||
}
|
||||
|
||||
__weak_reference(__feenableexcept, feenableexcept);
|
||||
__weak_reference(__fedisableexcept, fedisableexcept);
|
217
amd64/fenv.h
Normal file
217
amd64/fenv.h
Normal file
|
@ -0,0 +1,217 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-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.
|
||||
*
|
||||
* $FreeBSD: src/lib/msun/amd64/fenv.h,v 1.7 2010/02/03 20:23:47 kib Exp $
|
||||
*/
|
||||
|
||||
#ifndef _FENV_H_
|
||||
#define _FENV_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
__uint32_t __control;
|
||||
__uint32_t __status;
|
||||
__uint32_t __tag;
|
||||
char __other[16];
|
||||
} __x87;
|
||||
__uint32_t __mxcsr;
|
||||
} fenv_t;
|
||||
|
||||
typedef __uint16_t fexcept_t;
|
||||
|
||||
/* Exception flags */
|
||||
#define FE_INVALID 0x01
|
||||
#define FE_DENORMAL 0x02
|
||||
#define FE_DIVBYZERO 0x04
|
||||
#define FE_OVERFLOW 0x08
|
||||
#define FE_UNDERFLOW 0x10
|
||||
#define FE_INEXACT 0x20
|
||||
#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_DENORMAL | FE_INEXACT | \
|
||||
FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
|
||||
|
||||
/* Rounding modes */
|
||||
#define FE_TONEAREST 0x0000
|
||||
#define FE_DOWNWARD 0x0400
|
||||
#define FE_UPWARD 0x0800
|
||||
#define FE_TOWARDZERO 0x0c00
|
||||
#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \
|
||||
FE_UPWARD | FE_TOWARDZERO)
|
||||
|
||||
/*
|
||||
* As compared to the x87 control word, the SSE unit's control word
|
||||
* has the rounding control bits offset by 3 and the exception mask
|
||||
* bits offset by 7.
|
||||
*/
|
||||
#define _SSE_ROUND_SHIFT 3
|
||||
#define _SSE_EMASK_SHIFT 7
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Default floating-point environment */
|
||||
extern const fenv_t __fe_dfl_env;
|
||||
#define FE_DFL_ENV (&__fe_dfl_env)
|
||||
|
||||
#define __fldcw(__cw) __asm __volatile("fldcw %0" : : "m" (__cw))
|
||||
#define __fldenv(__env) __asm __volatile("fldenv %0" : : "m" (__env))
|
||||
#define __fldenvx(__env) __asm __volatile("fldenv %0" : : "m" (__env) \
|
||||
: "st", "st(1)", "st(2)", "st(3)", "st(4)", \
|
||||
"st(5)", "st(6)", "st(7)")
|
||||
#define __fnclex() __asm __volatile("fnclex")
|
||||
#define __fnstenv(__env) __asm __volatile("fnstenv %0" : "=m" (*(__env)))
|
||||
#define __fnstcw(__cw) __asm __volatile("fnstcw %0" : "=m" (*(__cw)))
|
||||
#define __fnstsw(__sw) __asm __volatile("fnstsw %0" : "=am" (*(__sw)))
|
||||
#define __fwait() __asm __volatile("fwait")
|
||||
#define __ldmxcsr(__csr) __asm __volatile("ldmxcsr %0" : : "m" (__csr))
|
||||
#define __stmxcsr(__csr) __asm __volatile("stmxcsr %0" : "=m" (*(__csr)))
|
||||
|
||||
static __inline int
|
||||
feclearexcept(int __excepts)
|
||||
{
|
||||
fenv_t __env;
|
||||
|
||||
if (__excepts == FE_ALL_EXCEPT) {
|
||||
__fnclex();
|
||||
} else {
|
||||
__fnstenv(&__env.__x87);
|
||||
__env.__x87.__status &= ~__excepts;
|
||||
__fldenv(__env.__x87);
|
||||
}
|
||||
__stmxcsr(&__env.__mxcsr);
|
||||
__env.__mxcsr &= ~__excepts;
|
||||
__ldmxcsr(__env.__mxcsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
fegetexceptflag(fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
__uint32_t __mxcsr;
|
||||
__uint16_t __status;
|
||||
|
||||
__stmxcsr(&__mxcsr);
|
||||
__fnstsw(&__status);
|
||||
*__flagp = (__mxcsr | __status) & __excepts;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
|
||||
int feraiseexcept(int __excepts);
|
||||
|
||||
static __inline int
|
||||
fetestexcept(int __excepts)
|
||||
{
|
||||
__uint32_t __mxcsr;
|
||||
__uint16_t __status;
|
||||
|
||||
__stmxcsr(&__mxcsr);
|
||||
__fnstsw(&__status);
|
||||
return ((__status | __mxcsr) & __excepts);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
fegetround(void)
|
||||
{
|
||||
__uint16_t __control;
|
||||
|
||||
/*
|
||||
* We assume that the x87 and the SSE unit agree on the
|
||||
* rounding mode. Reading the control word on the x87 turns
|
||||
* out to be about 5 times faster than reading it on the SSE
|
||||
* unit on an Opteron 244.
|
||||
*/
|
||||
__fnstcw(&__control);
|
||||
return (__control & _ROUND_MASK);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
fesetround(int __round)
|
||||
{
|
||||
__uint32_t __mxcsr;
|
||||
__uint16_t __control;
|
||||
|
||||
if (__round & ~_ROUND_MASK)
|
||||
return (-1);
|
||||
|
||||
__fnstcw(&__control);
|
||||
__control &= ~_ROUND_MASK;
|
||||
__control |= __round;
|
||||
__fldcw(__control);
|
||||
|
||||
__stmxcsr(&__mxcsr);
|
||||
__mxcsr &= ~(_ROUND_MASK << _SSE_ROUND_SHIFT);
|
||||
__mxcsr |= __round << _SSE_ROUND_SHIFT;
|
||||
__ldmxcsr(__mxcsr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fegetenv(fenv_t *__envp);
|
||||
int feholdexcept(fenv_t *__envp);
|
||||
|
||||
static __inline int
|
||||
fesetenv(const fenv_t *__envp)
|
||||
{
|
||||
|
||||
/*
|
||||
* XXX Using fldenvx() instead of fldenv() tells the compiler that this
|
||||
* instruction clobbers the i387 register stack. This happens because
|
||||
* we restore the tag word from the saved environment. Normally, this
|
||||
* would happen anyway and we wouldn't care, because the ABI allows
|
||||
* function calls to clobber the i387 regs. However, fesetenv() is
|
||||
* inlined, so we need to be more careful.
|
||||
*/
|
||||
__fldenvx(__envp->__x87);
|
||||
__ldmxcsr(__envp->__mxcsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int feupdateenv(const fenv_t *__envp);
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
|
||||
int feenableexcept(int __mask);
|
||||
int fedisableexcept(int __mask);
|
||||
|
||||
static __inline int
|
||||
fegetexcept(void)
|
||||
{
|
||||
__uint16_t __control;
|
||||
|
||||
/*
|
||||
* We assume that the masks for the x87 and the SSE unit are
|
||||
* the same.
|
||||
*/
|
||||
__fnstcw(&__control);
|
||||
return (~__control & FE_ALL_EXCEPT);
|
||||
}
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_FENV_H_ */
|
6
amd64/s_llrint.S
Normal file
6
amd64/s_llrint.S
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrint.S,v 1.3 2011/02/04 21:54:06 kib Exp $")
|
||||
|
||||
/* sizeof(long) == sizeof(long long) */
|
||||
#define fn llrint
|
||||
#include "s_lrint.S"
|
6
amd64/s_llrintf.S
Normal file
6
amd64/s_llrintf.S
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrintf.S,v 1.3 2011/02/04 21:54:06 kib Exp $")
|
||||
|
||||
/* sizeof(long) == sizeof(long long) */
|
||||
#define fn llrintf
|
||||
#include "s_lrintf.S"
|
37
amd64/s_llrintl.S
Normal file
37
amd64/s_llrintl.S
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrintl.S,v 1.2 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(llrintl)
|
||||
fldt 8(%rsp)
|
||||
subq $8,%rsp
|
||||
fistpll (%rsp)
|
||||
popq %rax
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
45
amd64/s_logbl.S
Normal file
45
amd64/s_logbl.S
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_logbl.S,v 1.4 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(logbl)
|
||||
fldt 8(%rsp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
39
amd64/s_lrint.S
Normal file
39
amd64/s_lrint.S
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef fn
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrint.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
#define fn lrint
|
||||
#endif
|
||||
|
||||
ENTRY(fn)
|
||||
cvtsd2si %xmm0, %rax
|
||||
ret
|
||||
END(fn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
39
amd64/s_lrintf.S
Normal file
39
amd64/s_lrintf.S
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef fn
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrintf.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
#define fn lrintf
|
||||
#endif
|
||||
|
||||
ENTRY(fn)
|
||||
cvtss2si %xmm0, %rax
|
||||
ret
|
||||
END(fn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
37
amd64/s_lrintl.S
Normal file
37
amd64/s_lrintl.S
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrintl.S,v 1.2 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(lrintl)
|
||||
fldt 8(%rsp)
|
||||
subq $8,%rsp
|
||||
fistpll (%rsp)
|
||||
popq %rax
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
68
amd64/s_remquo.S
Normal file
68
amd64/s_remquo.S
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*-
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_remquo.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(remquo)
|
||||
movsd %xmm0,-8(%rsp)
|
||||
movsd %xmm1,-16(%rsp)
|
||||
fldl -16(%rsp)
|
||||
fldl -8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
btw $10,%ax
|
||||
jc 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl -12(%rsp),%ecx
|
||||
xorl -4(%rsp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl %eax,(%rdi)
|
||||
fstpl -8(%rsp)
|
||||
movsd -8(%rsp),%xmm0
|
||||
ret
|
||||
END(remquo)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
68
amd64/s_remquof.S
Normal file
68
amd64/s_remquof.S
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*-
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_remquof.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(remquof)
|
||||
movss %xmm0,-4(%rsp)
|
||||
movss %xmm1,-8(%rsp)
|
||||
flds -8(%rsp)
|
||||
flds -4(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
btw $10,%ax
|
||||
jc 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl -8(%rsp),%ecx
|
||||
xorl -4(%rsp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl %eax,(%rdi)
|
||||
fstps -4(%rsp)
|
||||
movss -4(%rsp),%xmm0
|
||||
ret
|
||||
END(remquof)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
64
amd64/s_remquol.S
Normal file
64
amd64/s_remquol.S
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*-
|
||||
* Copyright (c) 2005-2008 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_remquol.S,v 1.2 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(remquol)
|
||||
fldt 24(%rsp)
|
||||
fldt 8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
btw $10,%ax
|
||||
jc 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 32(%rsp),%ecx
|
||||
xorl 16(%rsp),%ecx
|
||||
movsx %cx,%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl %eax,(%rdi)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
45
amd64/s_rintl.S
Normal file
45
amd64/s_rintl.S
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* $FreeBSD: src/lib/msun/amd64/s_rintl.S,v 1.2 2011/01/07 16:13:12 kib Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
ENTRY(rintl)
|
||||
fldt 8(%rsp)
|
||||
frndint
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
42
amd64/s_scalbn.S
Normal file
42
amd64/s_scalbn.S
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_scalbn.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(scalbn)
|
||||
movsd %xmm0,-8(%rsp)
|
||||
movl %edi,-12(%rsp)
|
||||
fildl -12(%rsp)
|
||||
fldl -8(%rsp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
fstpl -8(%rsp)
|
||||
movsd -8(%rsp),%xmm0
|
||||
ret
|
||||
END(scalbn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
45
amd64/s_scalbnf.S
Normal file
45
amd64/s_scalbnf.S
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_scalbnf.S,v 1.4 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(scalbnf)
|
||||
movss %xmm0,-8(%rsp)
|
||||
movl %edi,-4(%rsp)
|
||||
fildl -4(%rsp)
|
||||
flds -8(%rsp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
fstps -8(%rsp)
|
||||
movss -8(%rsp),%xmm0
|
||||
ret
|
||||
END(scalbnf)
|
||||
|
||||
.globl CNAME(ldexpf)
|
||||
.set CNAME(ldexpf),CNAME(scalbnf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
22
amd64/s_scalbnl.S
Normal file
22
amd64/s_scalbnl.S
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/amd64/s_scalbnl.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
/* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */
|
||||
|
||||
ENTRY(scalbnl)
|
||||
movl %edi,-4(%rsp)
|
||||
fildl -4(%rsp)
|
||||
fldt 8(%rsp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(scalbnl)
|
||||
|
||||
.globl CNAME(ldexpl)
|
||||
.set CNAME(ldexpl),CNAME(scalbnl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
4
bsdsrc/FILES
Normal file
4
bsdsrc/FILES
Normal file
|
@ -0,0 +1,4 @@
|
|||
b_exp.c
|
||||
b_log.c
|
||||
b_tgamma.c
|
||||
mathimpl.h
|
175
bsdsrc/b_exp.c
Normal file
175
bsdsrc/b_exp.c
Normal file
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
* Copyright (c) 1985, 1993
|
||||
* The Regents of the University of California. 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
*/
|
||||
|
||||
/* @(#)exp.c 8.1 (Berkeley) 6/4/93 */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/bsdsrc/b_exp.c,v 1.8 2008/02/22 02:26:51 das Exp $");
|
||||
|
||||
|
||||
/* EXP(X)
|
||||
* RETURN THE EXPONENTIAL OF X
|
||||
* DOUBLE PRECISION (IEEE 53 bits, VAX D FORMAT 56 BITS)
|
||||
* CODED IN C BY K.C. NG, 1/19/85;
|
||||
* REVISED BY K.C. NG on 2/6/85, 2/15/85, 3/7/85, 3/24/85, 4/16/85, 6/14/86.
|
||||
*
|
||||
* Required system supported functions:
|
||||
* scalb(x,n)
|
||||
* copysign(x,y)
|
||||
* finite(x)
|
||||
*
|
||||
* Method:
|
||||
* 1. Argument Reduction: given the input x, find r and integer k such
|
||||
* that
|
||||
* x = k*ln2 + r, |r| <= 0.5*ln2 .
|
||||
* r will be represented as r := z+c for better accuracy.
|
||||
*
|
||||
* 2. Compute exp(r) by
|
||||
*
|
||||
* exp(r) = 1 + r + r*R1/(2-R1),
|
||||
* where
|
||||
* R1 = x - x^2*(p1+x^2*(p2+x^2*(p3+x^2*(p4+p5*x^2)))).
|
||||
*
|
||||
* 3. exp(x) = 2^k * exp(r) .
|
||||
*
|
||||
* Special cases:
|
||||
* exp(INF) is INF, exp(NaN) is NaN;
|
||||
* exp(-INF)= 0;
|
||||
* for finite argument, only exp(0)=1 is exact.
|
||||
*
|
||||
* Accuracy:
|
||||
* exp(x) returns the exponential of x nearly rounded. In a test run
|
||||
* with 1,156,000 random arguments on a VAX, the maximum observed
|
||||
* error was 0.869 ulps (units in the last place).
|
||||
*/
|
||||
|
||||
#include "mathimpl.h"
|
||||
|
||||
const static double p1 = 0x1.555555555553ep-3;
|
||||
const static double p2 = -0x1.6c16c16bebd93p-9;
|
||||
const static double p3 = 0x1.1566aaf25de2cp-14;
|
||||
const static double p4 = -0x1.bbd41c5d26bf1p-20;
|
||||
const static double p5 = 0x1.6376972bea4d0p-25;
|
||||
const static double ln2hi = 0x1.62e42fee00000p-1;
|
||||
const static double ln2lo = 0x1.a39ef35793c76p-33;
|
||||
const static double lnhuge = 0x1.6602b15b7ecf2p9;
|
||||
const static double lntiny = -0x1.77af8ebeae354p9;
|
||||
const static double invln2 = 0x1.71547652b82fep0;
|
||||
|
||||
#if 0
|
||||
double exp(x)
|
||||
double x;
|
||||
{
|
||||
double z,hi,lo,c;
|
||||
int k;
|
||||
|
||||
#if !defined(vax)&&!defined(tahoe)
|
||||
if(x!=x) return(x); /* x is NaN */
|
||||
#endif /* !defined(vax)&&!defined(tahoe) */
|
||||
if( x <= lnhuge ) {
|
||||
if( x >= lntiny ) {
|
||||
|
||||
/* argument reduction : x --> x - k*ln2 */
|
||||
|
||||
k=invln2*x+copysign(0.5,x); /* k=NINT(x/ln2) */
|
||||
|
||||
/* express x-k*ln2 as hi-lo and let x=hi-lo rounded */
|
||||
|
||||
hi=x-k*ln2hi;
|
||||
x=hi-(lo=k*ln2lo);
|
||||
|
||||
/* return 2^k*[1+x+x*c/(2+c)] */
|
||||
z=x*x;
|
||||
c= x - z*(p1+z*(p2+z*(p3+z*(p4+z*p5))));
|
||||
return scalb(1.0+(hi-(lo-(x*c)/(2.0-c))),k);
|
||||
|
||||
}
|
||||
/* end of x > lntiny */
|
||||
|
||||
else
|
||||
/* exp(-big#) underflows to zero */
|
||||
if(finite(x)) return(scalb(1.0,-5000));
|
||||
|
||||
/* exp(-INF) is zero */
|
||||
else return(0.0);
|
||||
}
|
||||
/* end of x < lnhuge */
|
||||
|
||||
else
|
||||
/* exp(INF) is INF, exp(+big#) overflows to INF */
|
||||
return( finite(x) ? scalb(1.0,5000) : x);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* returns exp(r = x + c) for |c| < |x| with no overlap. */
|
||||
|
||||
double __exp__D(x, c)
|
||||
double x, c;
|
||||
{
|
||||
double z,hi,lo;
|
||||
int k;
|
||||
|
||||
if (x != x) /* x is NaN */
|
||||
return(x);
|
||||
if ( x <= lnhuge ) {
|
||||
if ( x >= lntiny ) {
|
||||
|
||||
/* argument reduction : x --> x - k*ln2 */
|
||||
z = invln2*x;
|
||||
k = z + copysign(.5, x);
|
||||
|
||||
/* express (x+c)-k*ln2 as hi-lo and let x=hi-lo rounded */
|
||||
|
||||
hi=(x-k*ln2hi); /* Exact. */
|
||||
x= hi - (lo = k*ln2lo-c);
|
||||
/* return 2^k*[1+x+x*c/(2+c)] */
|
||||
z=x*x;
|
||||
c= x - z*(p1+z*(p2+z*(p3+z*(p4+z*p5))));
|
||||
c = (x*c)/(2.0-c);
|
||||
|
||||
return scalb(1.+(hi-(lo - c)), k);
|
||||
}
|
||||
/* end of x > lntiny */
|
||||
|
||||
else
|
||||
/* exp(-big#) underflows to zero */
|
||||
if(finite(x)) return(scalb(1.0,-5000));
|
||||
|
||||
/* exp(-INF) is zero */
|
||||
else return(0.0);
|
||||
}
|
||||
/* end of x < lnhuge */
|
||||
|
||||
else
|
||||
/* exp(INF) is INF, exp(+big#) overflows to INF */
|
||||
return( finite(x) ? scalb(1.0,5000) : x);
|
||||
}
|
471
bsdsrc/b_log.c
Normal file
471
bsdsrc/b_log.c
Normal file
|
@ -0,0 +1,471 @@
|
|||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
*/
|
||||
|
||||
/* @(#)log.c 8.2 (Berkeley) 11/30/93 */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/bsdsrc/b_log.c,v 1.9 2008/02/22 02:26:51 das Exp $");
|
||||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "mathimpl.h"
|
||||
|
||||
/* Table-driven natural logarithm.
|
||||
*
|
||||
* This code was derived, with minor modifications, from:
|
||||
* Peter Tang, "Table-Driven Implementation of the
|
||||
* Logarithm in IEEE Floating-Point arithmetic." ACM Trans.
|
||||
* Math Software, vol 16. no 4, pp 378-400, Dec 1990).
|
||||
*
|
||||
* Calculates log(2^m*F*(1+f/F)), |f/j| <= 1/256,
|
||||
* where F = j/128 for j an integer in [0, 128].
|
||||
*
|
||||
* log(2^m) = log2_hi*m + log2_tail*m
|
||||
* since m is an integer, the dominant term is exact.
|
||||
* m has at most 10 digits (for subnormal numbers),
|
||||
* and log2_hi has 11 trailing zero bits.
|
||||
*
|
||||
* log(F) = logF_hi[j] + logF_lo[j] is in tabular form in log_table.h
|
||||
* logF_hi[] + 512 is exact.
|
||||
*
|
||||
* log(1+f/F) = 2*f/(2*F + f) + 1/12 * (2*f/(2*F + f))**3 + ...
|
||||
* the leading term is calculated to extra precision in two
|
||||
* parts, the larger of which adds exactly to the dominant
|
||||
* m and F terms.
|
||||
* There are two cases:
|
||||
* 1. when m, j are non-zero (m | j), use absolute
|
||||
* precision for the leading term.
|
||||
* 2. when m = j = 0, |1-x| < 1/256, and log(x) ~= (x-1).
|
||||
* In this case, use a relative precision of 24 bits.
|
||||
* (This is done differently in the original paper)
|
||||
*
|
||||
* Special cases:
|
||||
* 0 return signalling -Inf
|
||||
* neg return signalling NaN
|
||||
* +Inf return +Inf
|
||||
*/
|
||||
|
||||
#define N 128
|
||||
|
||||
/* Table of log(Fj) = logF_head[j] + logF_tail[j], for Fj = 1+j/128.
|
||||
* Used for generation of extend precision logarithms.
|
||||
* The constant 35184372088832 is 2^45, so the divide is exact.
|
||||
* It ensures correct reading of logF_head, even for inaccurate
|
||||
* decimal-to-binary conversion routines. (Everybody gets the
|
||||
* right answer for integers less than 2^53.)
|
||||
* Values for log(F) were generated using error < 10^-57 absolute
|
||||
* with the bc -l package.
|
||||
*/
|
||||
static double A1 = .08333333333333178827;
|
||||
static double A2 = .01250000000377174923;
|
||||
static double A3 = .002232139987919447809;
|
||||
static double A4 = .0004348877777076145742;
|
||||
|
||||
static double logF_head[N+1] = {
|
||||
0.,
|
||||
.007782140442060381246,
|
||||
.015504186535963526694,
|
||||
.023167059281547608406,
|
||||
.030771658666765233647,
|
||||
.038318864302141264488,
|
||||
.045809536031242714670,
|
||||
.053244514518837604555,
|
||||
.060624621816486978786,
|
||||
.067950661908525944454,
|
||||
.075223421237524235039,
|
||||
.082443669210988446138,
|
||||
.089612158689760690322,
|
||||
.096729626458454731618,
|
||||
.103796793681567578460,
|
||||
.110814366340264314203,
|
||||
.117783035656430001836,
|
||||
.124703478501032805070,
|
||||
.131576357788617315236,
|
||||
.138402322859292326029,
|
||||
.145182009844575077295,
|
||||
.151916042025732167530,
|
||||
.158605030176659056451,
|
||||
.165249572895390883786,
|
||||
.171850256926518341060,
|
||||
.178407657472689606947,
|
||||
.184922338493834104156,
|
||||
.191394852999565046047,
|
||||
.197825743329758552135,
|
||||
.204215541428766300668,
|
||||
.210564769107350002741,
|
||||
.216873938300523150246,
|
||||
.223143551314024080056,
|
||||
.229374101064877322642,
|
||||
.235566071312860003672,
|
||||
.241719936886966024758,
|
||||
.247836163904594286577,
|
||||
.253915209980732470285,
|
||||
.259957524436686071567,
|
||||
.265963548496984003577,
|
||||
.271933715484010463114,
|
||||
.277868451003087102435,
|
||||
.283768173130738432519,
|
||||
.289633292582948342896,
|
||||
.295464212893421063199,
|
||||
.301261330578199704177,
|
||||
.307025035294827830512,
|
||||
.312755710004239517729,
|
||||
.318453731118097493890,
|
||||
.324119468654316733591,
|
||||
.329753286372579168528,
|
||||
.335355541920762334484,
|
||||
.340926586970454081892,
|
||||
.346466767346100823488,
|
||||
.351976423156884266063,
|
||||
.357455888922231679316,
|
||||
.362905493689140712376,
|
||||
.368325561158599157352,
|
||||
.373716409793814818840,
|
||||
.379078352934811846353,
|
||||
.384411698910298582632,
|
||||
.389716751140440464951,
|
||||
.394993808240542421117,
|
||||
.400243164127459749579,
|
||||
.405465108107819105498,
|
||||
.410659924985338875558,
|
||||
.415827895143593195825,
|
||||
.420969294644237379543,
|
||||
.426084395310681429691,
|
||||
.431173464818130014464,
|
||||
.436236766774527495726,
|
||||
.441274560805140936281,
|
||||
.446287102628048160113,
|
||||
.451274644139630254358,
|
||||
.456237433481874177232,
|
||||
.461175715122408291790,
|
||||
.466089729924533457960,
|
||||
.470979715219073113985,
|
||||
.475845904869856894947,
|
||||
.480688529345570714212,
|
||||
.485507815781602403149,
|
||||
.490303988045525329653,
|
||||
.495077266798034543171,
|
||||
.499827869556611403822,
|
||||
.504556010751912253908,
|
||||
.509261901790523552335,
|
||||
.513945751101346104405,
|
||||
.518607764208354637958,
|
||||
.523248143765158602036,
|
||||
.527867089620485785417,
|
||||
.532464798869114019908,
|
||||
.537041465897345915436,
|
||||
.541597282432121573947,
|
||||
.546132437597407260909,
|
||||
.550647117952394182793,
|
||||
.555141507540611200965,
|
||||
.559615787935399566777,
|
||||
.564070138285387656651,
|
||||
.568504735352689749561,
|
||||
.572919753562018740922,
|
||||
.577315365035246941260,
|
||||
.581691739635061821900,
|
||||
.586049045003164792433,
|
||||
.590387446602107957005,
|
||||
.594707107746216934174,
|
||||
.599008189645246602594,
|
||||
.603290851438941899687,
|
||||
.607555250224322662688,
|
||||
.611801541106615331955,
|
||||
.616029877215623855590,
|
||||
.620240409751204424537,
|
||||
.624433288012369303032,
|
||||
.628608659422752680256,
|
||||
.632766669570628437213,
|
||||
.636907462236194987781,
|
||||
.641031179420679109171,
|
||||
.645137961373620782978,
|
||||
.649227946625615004450,
|
||||
.653301272011958644725,
|
||||
.657358072709030238911,
|
||||
.661398482245203922502,
|
||||
.665422632544505177065,
|
||||
.669430653942981734871,
|
||||
.673422675212350441142,
|
||||
.677398823590920073911,
|
||||
.681359224807238206267,
|
||||
.685304003098281100392,
|
||||
.689233281238557538017,
|
||||
.693147180560117703862
|
||||
};
|
||||
|
||||
static double logF_tail[N+1] = {
|
||||
0.,
|
||||
-.00000000000000543229938420049,
|
||||
.00000000000000172745674997061,
|
||||
-.00000000000001323017818229233,
|
||||
-.00000000000001154527628289872,
|
||||
-.00000000000000466529469958300,
|
||||
.00000000000005148849572685810,
|
||||
-.00000000000002532168943117445,
|
||||
-.00000000000005213620639136504,
|
||||
-.00000000000001819506003016881,
|
||||
.00000000000006329065958724544,
|
||||
.00000000000008614512936087814,
|
||||
-.00000000000007355770219435028,
|
||||
.00000000000009638067658552277,
|
||||
.00000000000007598636597194141,
|
||||
.00000000000002579999128306990,
|
||||
-.00000000000004654729747598444,
|
||||
-.00000000000007556920687451336,
|
||||
.00000000000010195735223708472,
|
||||
-.00000000000017319034406422306,
|
||||
-.00000000000007718001336828098,
|
||||
.00000000000010980754099855238,
|
||||
-.00000000000002047235780046195,
|
||||
-.00000000000008372091099235912,
|
||||
.00000000000014088127937111135,
|
||||
.00000000000012869017157588257,
|
||||
.00000000000017788850778198106,
|
||||
.00000000000006440856150696891,
|
||||
.00000000000016132822667240822,
|
||||
-.00000000000007540916511956188,
|
||||
-.00000000000000036507188831790,
|
||||
.00000000000009120937249914984,
|
||||
.00000000000018567570959796010,
|
||||
-.00000000000003149265065191483,
|
||||
-.00000000000009309459495196889,
|
||||
.00000000000017914338601329117,
|
||||
-.00000000000001302979717330866,
|
||||
.00000000000023097385217586939,
|
||||
.00000000000023999540484211737,
|
||||
.00000000000015393776174455408,
|
||||
-.00000000000036870428315837678,
|
||||
.00000000000036920375082080089,
|
||||
-.00000000000009383417223663699,
|
||||
.00000000000009433398189512690,
|
||||
.00000000000041481318704258568,
|
||||
-.00000000000003792316480209314,
|
||||
.00000000000008403156304792424,
|
||||
-.00000000000034262934348285429,
|
||||
.00000000000043712191957429145,
|
||||
-.00000000000010475750058776541,
|
||||
-.00000000000011118671389559323,
|
||||
.00000000000037549577257259853,
|
||||
.00000000000013912841212197565,
|
||||
.00000000000010775743037572640,
|
||||
.00000000000029391859187648000,
|
||||
-.00000000000042790509060060774,
|
||||
.00000000000022774076114039555,
|
||||
.00000000000010849569622967912,
|
||||
-.00000000000023073801945705758,
|
||||
.00000000000015761203773969435,
|
||||
.00000000000003345710269544082,
|
||||
-.00000000000041525158063436123,
|
||||
.00000000000032655698896907146,
|
||||
-.00000000000044704265010452446,
|
||||
.00000000000034527647952039772,
|
||||
-.00000000000007048962392109746,
|
||||
.00000000000011776978751369214,
|
||||
-.00000000000010774341461609578,
|
||||
.00000000000021863343293215910,
|
||||
.00000000000024132639491333131,
|
||||
.00000000000039057462209830700,
|
||||
-.00000000000026570679203560751,
|
||||
.00000000000037135141919592021,
|
||||
-.00000000000017166921336082431,
|
||||
-.00000000000028658285157914353,
|
||||
-.00000000000023812542263446809,
|
||||
.00000000000006576659768580062,
|
||||
-.00000000000028210143846181267,
|
||||
.00000000000010701931762114254,
|
||||
.00000000000018119346366441110,
|
||||
.00000000000009840465278232627,
|
||||
-.00000000000033149150282752542,
|
||||
-.00000000000018302857356041668,
|
||||
-.00000000000016207400156744949,
|
||||
.00000000000048303314949553201,
|
||||
-.00000000000071560553172382115,
|
||||
.00000000000088821239518571855,
|
||||
-.00000000000030900580513238244,
|
||||
-.00000000000061076551972851496,
|
||||
.00000000000035659969663347830,
|
||||
.00000000000035782396591276383,
|
||||
-.00000000000046226087001544578,
|
||||
.00000000000062279762917225156,
|
||||
.00000000000072838947272065741,
|
||||
.00000000000026809646615211673,
|
||||
-.00000000000010960825046059278,
|
||||
.00000000000002311949383800537,
|
||||
-.00000000000058469058005299247,
|
||||
-.00000000000002103748251144494,
|
||||
-.00000000000023323182945587408,
|
||||
-.00000000000042333694288141916,
|
||||
-.00000000000043933937969737844,
|
||||
.00000000000041341647073835565,
|
||||
.00000000000006841763641591466,
|
||||
.00000000000047585534004430641,
|
||||
.00000000000083679678674757695,
|
||||
-.00000000000085763734646658640,
|
||||
.00000000000021913281229340092,
|
||||
-.00000000000062242842536431148,
|
||||
-.00000000000010983594325438430,
|
||||
.00000000000065310431377633651,
|
||||
-.00000000000047580199021710769,
|
||||
-.00000000000037854251265457040,
|
||||
.00000000000040939233218678664,
|
||||
.00000000000087424383914858291,
|
||||
.00000000000025218188456842882,
|
||||
-.00000000000003608131360422557,
|
||||
-.00000000000050518555924280902,
|
||||
.00000000000078699403323355317,
|
||||
-.00000000000067020876961949060,
|
||||
.00000000000016108575753932458,
|
||||
.00000000000058527188436251509,
|
||||
-.00000000000035246757297904791,
|
||||
-.00000000000018372084495629058,
|
||||
.00000000000088606689813494916,
|
||||
.00000000000066486268071468700,
|
||||
.00000000000063831615170646519,
|
||||
.00000000000025144230728376072,
|
||||
-.00000000000017239444525614834
|
||||
};
|
||||
|
||||
#if 0
|
||||
double
|
||||
#ifdef _ANSI_SOURCE
|
||||
log(double x)
|
||||
#else
|
||||
log(x) double x;
|
||||
#endif
|
||||
{
|
||||
int m, j;
|
||||
double F, f, g, q, u, u2, v, zero = 0.0, one = 1.0;
|
||||
volatile double u1;
|
||||
|
||||
/* Catch special cases */
|
||||
if (x <= 0)
|
||||
if (x == zero) /* log(0) = -Inf */
|
||||
return (-one/zero);
|
||||
else /* log(neg) = NaN */
|
||||
return (zero/zero);
|
||||
else if (!finite(x))
|
||||
return (x+x); /* x = NaN, Inf */
|
||||
|
||||
/* Argument reduction: 1 <= g < 2; x/2^m = g; */
|
||||
/* y = F*(1 + f/F) for |f| <= 2^-8 */
|
||||
|
||||
m = logb(x);
|
||||
g = ldexp(x, -m);
|
||||
if (m == -1022) {
|
||||
j = logb(g), m += j;
|
||||
g = ldexp(g, -j);
|
||||
}
|
||||
j = N*(g-1) + .5;
|
||||
F = (1.0/N) * j + 1; /* F*128 is an integer in [128, 512] */
|
||||
f = g - F;
|
||||
|
||||
/* Approximate expansion for log(1+f/F) ~= u + q */
|
||||
g = 1/(2*F+f);
|
||||
u = 2*f*g;
|
||||
v = u*u;
|
||||
q = u*v*(A1 + v*(A2 + v*(A3 + v*A4)));
|
||||
|
||||
/* case 1: u1 = u rounded to 2^-43 absolute. Since u < 2^-8,
|
||||
* u1 has at most 35 bits, and F*u1 is exact, as F has < 8 bits.
|
||||
* It also adds exactly to |m*log2_hi + log_F_head[j] | < 750
|
||||
*/
|
||||
if (m | j)
|
||||
u1 = u + 513, u1 -= 513;
|
||||
|
||||
/* case 2: |1-x| < 1/256. The m- and j- dependent terms are zero;
|
||||
* u1 = u to 24 bits.
|
||||
*/
|
||||
else
|
||||
u1 = u, TRUNC(u1);
|
||||
u2 = (2.0*(f - F*u1) - u1*f) * g;
|
||||
/* u1 + u2 = 2f/(2F+f) to extra precision. */
|
||||
|
||||
/* log(x) = log(2^m*F*(1+f/F)) = */
|
||||
/* (m*log2_hi+logF_head[j]+u1) + (m*log2_lo+logF_tail[j]+q); */
|
||||
/* (exact) + (tiny) */
|
||||
|
||||
u1 += m*logF_head[N] + logF_head[j]; /* exact */
|
||||
u2 = (u2 + logF_tail[j]) + q; /* tiny */
|
||||
u2 += logF_tail[N]*m;
|
||||
return (u1 + u2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Extra precision variant, returning struct {double a, b;};
|
||||
* log(x) = a+b to 63 bits, with a rounded to 26 bits.
|
||||
*/
|
||||
struct Double
|
||||
#ifdef _ANSI_SOURCE
|
||||
__log__D(double x)
|
||||
#else
|
||||
__log__D(x) double x;
|
||||
#endif
|
||||
{
|
||||
int m, j;
|
||||
double F, f, g, q, u, v, u2;
|
||||
volatile double u1;
|
||||
struct Double r;
|
||||
|
||||
/* Argument reduction: 1 <= g < 2; x/2^m = g; */
|
||||
/* y = F*(1 + f/F) for |f| <= 2^-8 */
|
||||
|
||||
m = logb(x);
|
||||
g = ldexp(x, -m);
|
||||
if (m == -1022) {
|
||||
j = logb(g), m += j;
|
||||
g = ldexp(g, -j);
|
||||
}
|
||||
j = N*(g-1) + .5;
|
||||
F = (1.0/N) * j + 1;
|
||||
f = g - F;
|
||||
|
||||
g = 1/(2*F+f);
|
||||
u = 2*f*g;
|
||||
v = u*u;
|
||||
q = u*v*(A1 + v*(A2 + v*(A3 + v*A4)));
|
||||
if (m | j)
|
||||
u1 = u + 513, u1 -= 513;
|
||||
else
|
||||
u1 = u, TRUNC(u1);
|
||||
u2 = (2.0*(f - F*u1) - u1*f) * g;
|
||||
|
||||
u1 += m*logF_head[N] + logF_head[j];
|
||||
|
||||
u2 += logF_tail[j]; u2 += q;
|
||||
u2 += logF_tail[N]*m;
|
||||
r.a = u1 + u2; /* Only difference is here */
|
||||
TRUNC(r.a);
|
||||
r.b = (u1 - r.a) + u2;
|
||||
return (r);
|
||||
}
|
317
bsdsrc/b_tgamma.c
Normal file
317
bsdsrc/b_tgamma.c
Normal file
|
@ -0,0 +1,317 @@
|
|||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
*/
|
||||
|
||||
/* @(#)gamma.c 8.1 (Berkeley) 6/4/93 */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/bsdsrc/b_tgamma.c,v 1.10 2008/02/22 02:26:51 das Exp $");
|
||||
|
||||
/*
|
||||
* This code by P. McIlroy, Oct 1992;
|
||||
*
|
||||
* The financial support of UUNET Communications Services is greatfully
|
||||
* acknowledged.
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include "mathimpl.h"
|
||||
|
||||
/* METHOD:
|
||||
* x < 0: Use reflection formula, G(x) = pi/(sin(pi*x)*x*G(x))
|
||||
* At negative integers, return NaN and raise invalid.
|
||||
*
|
||||
* x < 6.5:
|
||||
* Use argument reduction G(x+1) = xG(x) to reach the
|
||||
* range [1.066124,2.066124]. Use a rational
|
||||
* approximation centered at the minimum (x0+1) to
|
||||
* ensure monotonicity.
|
||||
*
|
||||
* x >= 6.5: Use the asymptotic approximation (Stirling's formula)
|
||||
* adjusted for equal-ripples:
|
||||
*
|
||||
* log(G(x)) ~= (x-.5)*(log(x)-1) + .5(log(2*pi)-1) + 1/x*P(1/(x*x))
|
||||
*
|
||||
* Keep extra precision in multiplying (x-.5)(log(x)-1), to
|
||||
* avoid premature round-off.
|
||||
*
|
||||
* Special values:
|
||||
* -Inf: return NaN and raise invalid;
|
||||
* negative integer: return NaN and raise invalid;
|
||||
* other x ~< 177.79: return +-0 and raise underflow;
|
||||
* +-0: return +-Inf and raise divide-by-zero;
|
||||
* finite x ~> 171.63: return +Inf and raise overflow;
|
||||
* +Inf: return +Inf;
|
||||
* NaN: return NaN.
|
||||
*
|
||||
* Accuracy: tgamma(x) is accurate to within
|
||||
* x > 0: error provably < 0.9ulp.
|
||||
* Maximum observed in 1,000,000 trials was .87ulp.
|
||||
* x < 0:
|
||||
* Maximum observed error < 4ulp in 1,000,000 trials.
|
||||
*/
|
||||
|
||||
static double neg_gam(double);
|
||||
static double small_gam(double);
|
||||
static double smaller_gam(double);
|
||||
static struct Double large_gam(double);
|
||||
static struct Double ratfun_gam(double, double);
|
||||
|
||||
/*
|
||||
* Rational approximation, A0 + x*x*P(x)/Q(x), on the interval
|
||||
* [1.066.., 2.066..] accurate to 4.25e-19.
|
||||
*/
|
||||
#define LEFT -.3955078125 /* left boundary for rat. approx */
|
||||
#define x0 .461632144968362356785 /* xmin - 1 */
|
||||
|
||||
#define a0_hi 0.88560319441088874992
|
||||
#define a0_lo -.00000000000000004996427036469019695
|
||||
#define P0 6.21389571821820863029017800727e-01
|
||||
#define P1 2.65757198651533466104979197553e-01
|
||||
#define P2 5.53859446429917461063308081748e-03
|
||||
#define P3 1.38456698304096573887145282811e-03
|
||||
#define P4 2.40659950032711365819348969808e-03
|
||||
#define Q0 1.45019531250000000000000000000e+00
|
||||
#define Q1 1.06258521948016171343454061571e+00
|
||||
#define Q2 -2.07474561943859936441469926649e-01
|
||||
#define Q3 -1.46734131782005422506287573015e-01
|
||||
#define Q4 3.07878176156175520361557573779e-02
|
||||
#define Q5 5.12449347980666221336054633184e-03
|
||||
#define Q6 -1.76012741431666995019222898833e-03
|
||||
#define Q7 9.35021023573788935372153030556e-05
|
||||
#define Q8 6.13275507472443958924745652239e-06
|
||||
/*
|
||||
* Constants for large x approximation (x in [6, Inf])
|
||||
* (Accurate to 2.8*10^-19 absolute)
|
||||
*/
|
||||
#define lns2pi_hi 0.418945312500000
|
||||
#define lns2pi_lo -.000006779295327258219670263595
|
||||
#define Pa0 8.33333333333333148296162562474e-02
|
||||
#define Pa1 -2.77777777774548123579378966497e-03
|
||||
#define Pa2 7.93650778754435631476282786423e-04
|
||||
#define Pa3 -5.95235082566672847950717262222e-04
|
||||
#define Pa4 8.41428560346653702135821806252e-04
|
||||
#define Pa5 -1.89773526463879200348872089421e-03
|
||||
#define Pa6 5.69394463439411649408050664078e-03
|
||||
#define Pa7 -1.44705562421428915453880392761e-02
|
||||
|
||||
static const double zero = 0., one = 1.0, tiny = 1e-300;
|
||||
|
||||
double
|
||||
tgamma(x)
|
||||
double x;
|
||||
{
|
||||
struct Double u;
|
||||
|
||||
if (x >= 6) {
|
||||
if(x > 171.63)
|
||||
return (x / zero);
|
||||
u = large_gam(x);
|
||||
return(__exp__D(u.a, u.b));
|
||||
} else if (x >= 1.0 + LEFT + x0)
|
||||
return (small_gam(x));
|
||||
else if (x > 1.e-17)
|
||||
return (smaller_gam(x));
|
||||
else if (x > -1.e-17) {
|
||||
if (x != 0.0)
|
||||
u.a = one - tiny; /* raise inexact */
|
||||
return (one/x);
|
||||
} else if (!finite(x))
|
||||
return (x - x); /* x is NaN or -Inf */
|
||||
else
|
||||
return (neg_gam(x));
|
||||
}
|
||||
/*
|
||||
* Accurate to max(ulp(1/128) absolute, 2^-66 relative) error.
|
||||
*/
|
||||
static struct Double
|
||||
large_gam(x)
|
||||
double x;
|
||||
{
|
||||
double z, p;
|
||||
struct Double t, u, v;
|
||||
|
||||
z = one/(x*x);
|
||||
p = Pa0+z*(Pa1+z*(Pa2+z*(Pa3+z*(Pa4+z*(Pa5+z*(Pa6+z*Pa7))))));
|
||||
p = p/x;
|
||||
|
||||
u = __log__D(x);
|
||||
u.a -= one;
|
||||
v.a = (x -= .5);
|
||||
TRUNC(v.a);
|
||||
v.b = x - v.a;
|
||||
t.a = v.a*u.a; /* t = (x-.5)*(log(x)-1) */
|
||||
t.b = v.b*u.a + x*u.b;
|
||||
/* return t.a + t.b + lns2pi_hi + lns2pi_lo + p */
|
||||
t.b += lns2pi_lo; t.b += p;
|
||||
u.a = lns2pi_hi + t.b; u.a += t.a;
|
||||
u.b = t.a - u.a;
|
||||
u.b += lns2pi_hi; u.b += t.b;
|
||||
return (u);
|
||||
}
|
||||
/*
|
||||
* Good to < 1 ulp. (provably .90 ulp; .87 ulp on 1,000,000 runs.)
|
||||
* It also has correct monotonicity.
|
||||
*/
|
||||
static double
|
||||
small_gam(x)
|
||||
double x;
|
||||
{
|
||||
double y, ym1, t;
|
||||
struct Double yy, r;
|
||||
y = x - one;
|
||||
ym1 = y - one;
|
||||
if (y <= 1.0 + (LEFT + x0)) {
|
||||
yy = ratfun_gam(y - x0, 0);
|
||||
return (yy.a + yy.b);
|
||||
}
|
||||
r.a = y;
|
||||
TRUNC(r.a);
|
||||
yy.a = r.a - one;
|
||||
y = ym1;
|
||||
yy.b = r.b = y - yy.a;
|
||||
/* Argument reduction: G(x+1) = x*G(x) */
|
||||
for (ym1 = y-one; ym1 > LEFT + x0; y = ym1--, yy.a--) {
|
||||
t = r.a*yy.a;
|
||||
r.b = r.a*yy.b + y*r.b;
|
||||
r.a = t;
|
||||
TRUNC(r.a);
|
||||
r.b += (t - r.a);
|
||||
}
|
||||
/* Return r*tgamma(y). */
|
||||
yy = ratfun_gam(y - x0, 0);
|
||||
y = r.b*(yy.a + yy.b) + r.a*yy.b;
|
||||
y += yy.a*r.a;
|
||||
return (y);
|
||||
}
|
||||
/*
|
||||
* Good on (0, 1+x0+LEFT]. Accurate to 1ulp.
|
||||
*/
|
||||
static double
|
||||
smaller_gam(x)
|
||||
double x;
|
||||
{
|
||||
double t, d;
|
||||
struct Double r, xx;
|
||||
if (x < x0 + LEFT) {
|
||||
t = x, TRUNC(t);
|
||||
d = (t+x)*(x-t);
|
||||
t *= t;
|
||||
xx.a = (t + x), TRUNC(xx.a);
|
||||
xx.b = x - xx.a; xx.b += t; xx.b += d;
|
||||
t = (one-x0); t += x;
|
||||
d = (one-x0); d -= t; d += x;
|
||||
x = xx.a + xx.b;
|
||||
} else {
|
||||
xx.a = x, TRUNC(xx.a);
|
||||
xx.b = x - xx.a;
|
||||
t = x - x0;
|
||||
d = (-x0 -t); d += x;
|
||||
}
|
||||
r = ratfun_gam(t, d);
|
||||
d = r.a/x, TRUNC(d);
|
||||
r.a -= d*xx.a; r.a -= d*xx.b; r.a += r.b;
|
||||
return (d + r.a/x);
|
||||
}
|
||||
/*
|
||||
* returns (z+c)^2 * P(z)/Q(z) + a0
|
||||
*/
|
||||
static struct Double
|
||||
ratfun_gam(z, c)
|
||||
double z, c;
|
||||
{
|
||||
double p, q;
|
||||
struct Double r, t;
|
||||
|
||||
q = Q0 +z*(Q1+z*(Q2+z*(Q3+z*(Q4+z*(Q5+z*(Q6+z*(Q7+z*Q8)))))));
|
||||
p = P0 + z*(P1 + z*(P2 + z*(P3 + z*P4)));
|
||||
|
||||
/* return r.a + r.b = a0 + (z+c)^2*p/q, with r.a truncated to 26 bits. */
|
||||
p = p/q;
|
||||
t.a = z, TRUNC(t.a); /* t ~= z + c */
|
||||
t.b = (z - t.a) + c;
|
||||
t.b *= (t.a + z);
|
||||
q = (t.a *= t.a); /* t = (z+c)^2 */
|
||||
TRUNC(t.a);
|
||||
t.b += (q - t.a);
|
||||
r.a = p, TRUNC(r.a); /* r = P/Q */
|
||||
r.b = p - r.a;
|
||||
t.b = t.b*p + t.a*r.b + a0_lo;
|
||||
t.a *= r.a; /* t = (z+c)^2*(P/Q) */
|
||||
r.a = t.a + a0_hi, TRUNC(r.a);
|
||||
r.b = ((a0_hi-r.a) + t.a) + t.b;
|
||||
return (r); /* r = a0 + t */
|
||||
}
|
||||
|
||||
static double
|
||||
neg_gam(x)
|
||||
double x;
|
||||
{
|
||||
int sgn = 1;
|
||||
struct Double lg, lsine;
|
||||
double y, z;
|
||||
|
||||
y = ceil(x);
|
||||
if (y == x) /* Negative integer. */
|
||||
return ((x - x) / zero);
|
||||
z = y - x;
|
||||
if (z > 0.5)
|
||||
z = one - z;
|
||||
y = 0.5 * y;
|
||||
if (y == ceil(y))
|
||||
sgn = -1;
|
||||
if (z < .25)
|
||||
z = sin(M_PI*z);
|
||||
else
|
||||
z = cos(M_PI*(0.5-z));
|
||||
/* Special case: G(1-x) = Inf; G(x) may be nonzero. */
|
||||
if (x < -170) {
|
||||
if (x < -190)
|
||||
return ((double)sgn*tiny*tiny);
|
||||
y = one - x; /* exact: 128 < |x| < 255 */
|
||||
lg = large_gam(y);
|
||||
lsine = __log__D(M_PI/z); /* = TRUNC(log(u)) + small */
|
||||
lg.a -= lsine.a; /* exact (opposite signs) */
|
||||
lg.b -= lsine.b;
|
||||
y = -(lg.a + lg.b);
|
||||
z = (y + lg.a) + lg.b;
|
||||
y = __exp__D(y, z);
|
||||
if (sgn < 0) y = -y;
|
||||
return (y);
|
||||
}
|
||||
y = one-x;
|
||||
if (one-y == x)
|
||||
y = tgamma(y);
|
||||
else /* 1-x is inexact */
|
||||
y = -x*tgamma(-x);
|
||||
if (sgn < 0) y = -y;
|
||||
return (M_PI / (y*z));
|
||||
}
|
74
bsdsrc/mathimpl.h
Normal file
74
bsdsrc/mathimpl.h
Normal file
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)mathimpl.h 8.1 (Berkeley) 6/4/93
|
||||
* $FreeBSD: src/lib/msun/bsdsrc/mathimpl.h,v 1.7 2005/11/18 05:03:12 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _MATHIMPL_H_
|
||||
#define _MATHIMPL_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../src/math_private.h"
|
||||
|
||||
/*
|
||||
* TRUNC() is a macro that sets the trailing 27 bits in the mantissa of an
|
||||
* IEEE double variable to zero. It must be expression-like for syntactic
|
||||
* reasons, and we implement this expression using an inline function
|
||||
* instead of a pure macro to avoid depending on the gcc feature of
|
||||
* statement-expressions.
|
||||
*/
|
||||
#define TRUNC(d) (_b_trunc(&(d)))
|
||||
|
||||
static __inline void
|
||||
_b_trunc(volatile double *_dp)
|
||||
{
|
||||
uint32_t _lw;
|
||||
|
||||
GET_LOW_WORD(_lw, *_dp);
|
||||
SET_LOW_WORD(*_dp, _lw & 0xf8000000);
|
||||
}
|
||||
|
||||
struct Double {
|
||||
double a;
|
||||
double b;
|
||||
};
|
||||
|
||||
/*
|
||||
* Functions internal to the math package, yet not static.
|
||||
*/
|
||||
double __exp__D(double, double);
|
||||
struct Double __log__D(double);
|
||||
|
||||
#endif /* !_MATHIMPL_H_ */
|
53
i387/FILES
Normal file
53
i387/FILES
Normal file
|
@ -0,0 +1,53 @@
|
|||
Makefile.inc
|
||||
Symbol.map
|
||||
e_exp.S
|
||||
e_fmod.S
|
||||
e_log.S
|
||||
e_log10.S
|
||||
e_log10f.S
|
||||
e_logf.S
|
||||
e_remainder.S
|
||||
e_remainderf.S
|
||||
e_remainderl.S
|
||||
e_sqrt.S
|
||||
e_sqrtf.S
|
||||
e_sqrtl.S
|
||||
fenv.c
|
||||
fenv.h
|
||||
invtrig.c
|
||||
s_ceil.S
|
||||
s_ceilf.S
|
||||
s_ceill.S
|
||||
s_copysign.S
|
||||
s_copysignf.S
|
||||
s_copysignl.S
|
||||
s_cos.S
|
||||
s_finite.S
|
||||
s_floor.S
|
||||
s_floorf.S
|
||||
s_floorl.S
|
||||
s_llrint.S
|
||||
s_llrintf.S
|
||||
s_llrintl.S
|
||||
s_logb.S
|
||||
s_logbf.S
|
||||
s_logbl.S
|
||||
s_lrint.S
|
||||
s_lrintf.S
|
||||
s_lrintl.S
|
||||
s_remquo.S
|
||||
s_remquof.S
|
||||
s_remquol.S
|
||||
s_rint.S
|
||||
s_rintf.S
|
||||
s_rintl.S
|
||||
s_scalbn.S
|
||||
s_scalbnf.S
|
||||
s_scalbnl.S
|
||||
s_significand.S
|
||||
s_significandf.S
|
||||
s_sin.S
|
||||
s_tan.S
|
||||
s_trunc.S
|
||||
s_truncf.S
|
||||
s_truncl.S
|
21
i387/Makefile.inc
Normal file
21
i387/Makefile.inc
Normal file
|
@ -0,0 +1,21 @@
|
|||
# $FreeBSD: src/lib/msun/i387/Makefile.inc,v 1.13 2008/03/30 21:21:53 das Exp $
|
||||
|
||||
ARCH_SRCS = e_exp.S e_fmod.S e_log.S e_log10.S \
|
||||
e_remainder.S e_sqrt.S s_ceil.S s_copysign.S \
|
||||
s_cos.S s_finite.S s_floor.S s_llrint.S s_logb.S s_lrint.S \
|
||||
s_remquo.S s_rint.S s_scalbn.S s_significand.S s_sin.S s_tan.S \
|
||||
s_trunc.S
|
||||
|
||||
# float counterparts
|
||||
ARCH_SRCS+= e_log10f.S e_logf.S e_remainderf.S \
|
||||
e_sqrtf.S s_ceilf.S s_copysignf.S s_floorf.S \
|
||||
s_llrintf.S s_logbf.S s_lrintf.S \
|
||||
s_remquof.S s_rintf.S s_scalbnf.S s_significandf.S s_truncf.S
|
||||
|
||||
# long double counterparts
|
||||
ARCH_SRCS+= e_remainderl.S e_sqrtl.S s_ceill.S s_copysignl.S \
|
||||
s_floorl.S s_llrintl.S \
|
||||
s_logbl.S s_lrintl.S s_remquol.S s_rintl.S s_scalbnl.S s_truncl.S
|
||||
|
||||
LDBL_PREC = 64 # XXX 64-bit format, but truncated to 53 bits
|
||||
SYM_MAPS += ${.CURDIR}/i387/Symbol.map
|
16
i387/Symbol.map
Normal file
16
i387/Symbol.map
Normal file
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* $FreeBSD: src/lib/msun/i387/Symbol.map,v 1.2 2007/04/29 14:05:21 deischen Exp $
|
||||
*/
|
||||
FBSD_1.0 {
|
||||
__has_sse;
|
||||
__test_sse;
|
||||
fesetexceptflag;
|
||||
feraiseexcept;
|
||||
fegetenv;
|
||||
feholdexcept;
|
||||
feupdateenv;
|
||||
__feenableexcept;
|
||||
__fedisableexcept;
|
||||
feenableexcept;
|
||||
fedisableexcept;
|
||||
};
|
100
i387/e_exp.S
Normal file
100
i387/e_exp.S
Normal file
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_exp.S,v 1.14 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
/* e^x = 2^(x * log2(e)) */
|
||||
ENTRY(exp)
|
||||
/*
|
||||
* If x is +-Inf, then the subtraction would give Inf-Inf = NaN.
|
||||
* Avoid this. Also avoid it if x is NaN for convenience.
|
||||
*/
|
||||
movl 8(%esp),%eax
|
||||
andl $0x7fffffff,%eax
|
||||
cmpl $0x7ff00000,%eax
|
||||
jae x_Inf_or_NaN
|
||||
|
||||
fldl 4(%esp)
|
||||
|
||||
/*
|
||||
* Extended precision is needed to reduce the maximum error from
|
||||
* hundreds of ulps to less than 1 ulp. Switch to it if necessary.
|
||||
* We may as well set the rounding mode to to-nearest and mask traps
|
||||
* if we switch.
|
||||
*/
|
||||
fstcw 4(%esp)
|
||||
movl 4(%esp),%eax
|
||||
andl $0x0300,%eax
|
||||
cmpl $0x0300,%eax /* RC == 0 && PC == 3? */
|
||||
je 1f /* jump if mode is good */
|
||||
movl $0x137f,8(%esp)
|
||||
fldcw 8(%esp)
|
||||
1:
|
||||
fldl2e
|
||||
fmulp /* x * log2(e) */
|
||||
fst %st(1)
|
||||
frndint /* int(x * log2(e)) */
|
||||
fst %st(2)
|
||||
fsubrp /* fract(x * log2(e)) */
|
||||
f2xm1 /* 2^(fract(x * log2(e))) - 1 */
|
||||
fld1
|
||||
faddp /* 2^(fract(x * log2(e))) */
|
||||
fscale /* e^x */
|
||||
fstp %st(1)
|
||||
je 1f
|
||||
fldcw 4(%esp)
|
||||
1:
|
||||
ret
|
||||
|
||||
x_Inf_or_NaN:
|
||||
/*
|
||||
* Return 0 if x is -Inf. Otherwise just return x; when x is Inf
|
||||
* this gives Inf, and when x is a NaN this gives the same result
|
||||
* as (x + x) (x quieted).
|
||||
*/
|
||||
cmpl $0xfff00000,8(%esp)
|
||||
jne x_not_minus_Inf
|
||||
cmpl $0,4(%esp)
|
||||
jne x_not_minus_Inf
|
||||
fldz
|
||||
ret
|
||||
|
||||
x_not_minus_Inf:
|
||||
fldl 4(%esp)
|
||||
ret
|
||||
END(exp)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
50
i387/e_fmod.S
Normal file
50
i387/e_fmod.S
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_fmod.S,v 1.11 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(fmod)
|
||||
fldl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
1: fprem
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(fmod)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
46
i387/e_log.S
Normal file
46
i387/e_log.S
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_log.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(log)
|
||||
fldln2
|
||||
fldl 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
END(log)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
46
i387/e_log10.S
Normal file
46
i387/e_log10.S
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_log10.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(log10)
|
||||
fldlg2
|
||||
fldl 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
END(log10)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
18
i387/e_log10f.S
Normal file
18
i387/e_log10f.S
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_log10f.S,v 1.4 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: e_log10f.S,v 1.1 1996/07/03 16:50:22 jtc Exp $") */
|
||||
|
||||
ENTRY(log10f)
|
||||
fldlg2
|
||||
flds 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
END(log10f)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
17
i387/e_logf.S
Normal file
17
i387/e_logf.S
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_logf.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: e_logf.S,v 1.2 1996/07/06 00:15:45 jtc Exp $") */
|
||||
|
||||
ENTRY(logf)
|
||||
fldln2
|
||||
flds 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
50
i387/e_remainder.S
Normal file
50
i387/e_remainder.S
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_remainder.S,v 1.11 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(remainder)
|
||||
fldl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(remainder)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
22
i387/e_remainderf.S
Normal file
22
i387/e_remainderf.S
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_remainderf.S,v 1.4 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: e_remainderf.S,v 1.2 1995/05/08 23:49:47 jtc Exp $") */
|
||||
|
||||
ENTRY(remainderf)
|
||||
flds 8(%esp)
|
||||
flds 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(remainderf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
50
i387/e_remainderl.S
Normal file
50
i387/e_remainderl.S
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_remainderl.S,v 1.2 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(remainderl)
|
||||
fldt 16(%esp)
|
||||
fldt 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
45
i387/e_sqrt.S
Normal file
45
i387/e_sqrt.S
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_sqrt.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(sqrt)
|
||||
fldl 4(%esp)
|
||||
fsqrt
|
||||
ret
|
||||
END(sqrt)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
17
i387/e_sqrtf.S
Normal file
17
i387/e_sqrtf.S
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_sqrtf.S,v 1.4 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: e_sqrtf.S,v 1.2 1995/05/08 23:50:14 jtc Exp $") */
|
||||
|
||||
ENTRY(sqrtf)
|
||||
flds 4(%esp)
|
||||
fsqrt
|
||||
ret
|
||||
END(sqrtf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
44
i387/e_sqrtl.S
Normal file
44
i387/e_sqrtl.S
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/e_sqrtl.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(sqrtl)
|
||||
fldt 4(%esp)
|
||||
fsqrt
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
213
i387/fenv.c
Normal file
213
i387/fenv.c
Normal file
|
@ -0,0 +1,213 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-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.
|
||||
*
|
||||
* $FreeBSD: src/lib/msun/i387/fenv.c,v 1.4 2010/02/03 20:23:47 kib Exp $
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <machine/npx.h>
|
||||
#include "fenv.h"
|
||||
|
||||
const fenv_t __fe_dfl_env = {
|
||||
__INITIAL_NPXCW__,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x1f80,
|
||||
0xffffffff,
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff }
|
||||
};
|
||||
|
||||
enum __sse_support __has_sse =
|
||||
#ifdef __SSE__
|
||||
__SSE_YES;
|
||||
#else
|
||||
__SSE_UNK;
|
||||
#endif
|
||||
|
||||
#define getfl(x) __asm __volatile("pushfl\n\tpopl %0" : "=mr" (*(x)))
|
||||
#define setfl(x) __asm __volatile("pushl %0\n\tpopfl" : : "g" (x))
|
||||
#define cpuid_dx(x) __asm __volatile("pushl %%ebx\n\tmovl $1, %%eax\n\t" \
|
||||
"cpuid\n\tpopl %%ebx" \
|
||||
: "=d" (*(x)) : : "eax", "ecx")
|
||||
|
||||
/*
|
||||
* Test for SSE support on this processor. We need to do this because
|
||||
* we need to use ldmxcsr/stmxcsr to get correct results if any part
|
||||
* of the program was compiled to use SSE floating-point, but we can't
|
||||
* use SSE on older processors.
|
||||
*/
|
||||
int
|
||||
__test_sse(void)
|
||||
{
|
||||
int flag, nflag;
|
||||
int dx_features;
|
||||
|
||||
/* Am I a 486? */
|
||||
getfl(&flag);
|
||||
nflag = flag ^ 0x200000;
|
||||
setfl(nflag);
|
||||
getfl(&nflag);
|
||||
if (flag != nflag) {
|
||||
/* Not a 486, so CPUID should work. */
|
||||
cpuid_dx(&dx_features);
|
||||
if (dx_features & 0x2000000) {
|
||||
__has_sse = __SSE_YES;
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
__has_sse = __SSE_NO;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fesetexceptflag(const fexcept_t *flagp, int excepts)
|
||||
{
|
||||
fenv_t env;
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__fnstenv(&env);
|
||||
env.__status &= ~excepts;
|
||||
env.__status |= *flagp & excepts;
|
||||
__fldenv(env);
|
||||
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&mxcsr);
|
||||
mxcsr &= ~excepts;
|
||||
mxcsr |= *flagp & excepts;
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feraiseexcept(int excepts)
|
||||
{
|
||||
fexcept_t ex = excepts;
|
||||
|
||||
fesetexceptflag(&ex, excepts);
|
||||
__fwait();
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fegetenv(fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__fnstenv(envp);
|
||||
/*
|
||||
* fnstenv masks all exceptions, so we need to restore
|
||||
* the old control word to avoid this side effect.
|
||||
*/
|
||||
__fldcw(envp->__control);
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&mxcsr);
|
||||
__set_mxcsr(*envp, mxcsr);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feholdexcept(fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__fnstenv(envp);
|
||||
__fnclex();
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&mxcsr);
|
||||
__set_mxcsr(*envp, mxcsr);
|
||||
mxcsr &= ~FE_ALL_EXCEPT;
|
||||
mxcsr |= FE_ALL_EXCEPT << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feupdateenv(const fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
__uint16_t status;
|
||||
|
||||
__fnstsw(&status);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&mxcsr);
|
||||
else
|
||||
mxcsr = 0;
|
||||
fesetenv(envp);
|
||||
feraiseexcept((mxcsr | status) & FE_ALL_EXCEPT);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
__feenableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&mxcsr);
|
||||
else
|
||||
mxcsr = 0;
|
||||
omask = (control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control &= ~mask;
|
||||
__fldcw(control);
|
||||
if (__HAS_SSE()) {
|
||||
mxcsr &= ~(mask << _SSE_EMASK_SHIFT);
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
return (~omask);
|
||||
}
|
||||
|
||||
int
|
||||
__fedisableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&mxcsr);
|
||||
else
|
||||
mxcsr = 0;
|
||||
omask = (control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control |= mask;
|
||||
__fldcw(control);
|
||||
if (__HAS_SSE()) {
|
||||
mxcsr |= mask << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
return (~omask);
|
||||
}
|
||||
|
||||
__weak_reference(__feenableexcept, feenableexcept);
|
||||
__weak_reference(__fedisableexcept, fedisableexcept);
|
254
i387/fenv.h
Normal file
254
i387/fenv.h
Normal file
|
@ -0,0 +1,254 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-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.
|
||||
*
|
||||
* $FreeBSD: src/lib/msun/i387/fenv.h,v 1.7 2010/02/03 20:23:47 kib Exp $
|
||||
*/
|
||||
|
||||
#ifndef _FENV_H_
|
||||
#define _FENV_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
/*
|
||||
* To preserve binary compatibility with FreeBSD 5.3, we pack the
|
||||
* mxcsr into some reserved fields, rather than changing sizeof(fenv_t).
|
||||
*/
|
||||
typedef struct {
|
||||
__uint16_t __control;
|
||||
__uint16_t __mxcsr_hi;
|
||||
__uint16_t __status;
|
||||
__uint16_t __mxcsr_lo;
|
||||
__uint32_t __tag;
|
||||
char __other[16];
|
||||
} fenv_t;
|
||||
|
||||
#define __get_mxcsr(env) (((env).__mxcsr_hi << 16) | \
|
||||
((env).__mxcsr_lo))
|
||||
#define __set_mxcsr(env, x) do { \
|
||||
(env).__mxcsr_hi = (__uint32_t)(x) >> 16; \
|
||||
(env).__mxcsr_lo = (__uint16_t)(x); \
|
||||
} while (0)
|
||||
|
||||
typedef __uint16_t fexcept_t;
|
||||
|
||||
/* Exception flags */
|
||||
#define FE_INVALID 0x01
|
||||
#define FE_DENORMAL 0x02
|
||||
#define FE_DIVBYZERO 0x04
|
||||
#define FE_OVERFLOW 0x08
|
||||
#define FE_UNDERFLOW 0x10
|
||||
#define FE_INEXACT 0x20
|
||||
#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_DENORMAL | FE_INEXACT | \
|
||||
FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
|
||||
|
||||
/* Rounding modes */
|
||||
#define FE_TONEAREST 0x0000
|
||||
#define FE_DOWNWARD 0x0400
|
||||
#define FE_UPWARD 0x0800
|
||||
#define FE_TOWARDZERO 0x0c00
|
||||
#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \
|
||||
FE_UPWARD | FE_TOWARDZERO)
|
||||
|
||||
/*
|
||||
* As compared to the x87 control word, the SSE unit's control word
|
||||
* has the rounding control bits offset by 3 and the exception mask
|
||||
* bits offset by 7.
|
||||
*/
|
||||
#define _SSE_ROUND_SHIFT 3
|
||||
#define _SSE_EMASK_SHIFT 7
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* After testing for SSE support once, we cache the result in __has_sse. */
|
||||
enum __sse_support { __SSE_YES, __SSE_NO, __SSE_UNK };
|
||||
extern enum __sse_support __has_sse;
|
||||
int __test_sse(void);
|
||||
#ifdef __SSE__
|
||||
#define __HAS_SSE() 1
|
||||
#else
|
||||
#define __HAS_SSE() (__has_sse == __SSE_YES || \
|
||||
(__has_sse == __SSE_UNK && __test_sse()))
|
||||
#endif
|
||||
|
||||
/* Default floating-point environment */
|
||||
extern const fenv_t __fe_dfl_env;
|
||||
#define FE_DFL_ENV (&__fe_dfl_env)
|
||||
|
||||
#define __fldcw(__cw) __asm __volatile("fldcw %0" : : "m" (__cw))
|
||||
#define __fldenv(__env) __asm __volatile("fldenv %0" : : "m" (__env))
|
||||
#define __fldenvx(__env) __asm __volatile("fldenv %0" : : "m" (__env) \
|
||||
: "st", "st(1)", "st(2)", "st(3)", "st(4)", \
|
||||
"st(5)", "st(6)", "st(7)")
|
||||
#define __fnclex() __asm __volatile("fnclex")
|
||||
#define __fnstenv(__env) __asm __volatile("fnstenv %0" : "=m" (*(__env)))
|
||||
#define __fnstcw(__cw) __asm __volatile("fnstcw %0" : "=m" (*(__cw)))
|
||||
#define __fnstsw(__sw) __asm __volatile("fnstsw %0" : "=am" (*(__sw)))
|
||||
#define __fwait() __asm __volatile("fwait")
|
||||
#define __ldmxcsr(__csr) __asm __volatile("ldmxcsr %0" : : "m" (__csr))
|
||||
#define __stmxcsr(__csr) __asm __volatile("stmxcsr %0" : "=m" (*(__csr)))
|
||||
|
||||
static __inline int
|
||||
feclearexcept(int __excepts)
|
||||
{
|
||||
fenv_t __env;
|
||||
__uint32_t __mxcsr;
|
||||
|
||||
if (__excepts == FE_ALL_EXCEPT) {
|
||||
__fnclex();
|
||||
} else {
|
||||
__fnstenv(&__env);
|
||||
__env.__status &= ~__excepts;
|
||||
__fldenv(__env);
|
||||
}
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&__mxcsr);
|
||||
__mxcsr &= ~__excepts;
|
||||
__ldmxcsr(__mxcsr);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
fegetexceptflag(fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
__uint32_t __mxcsr;
|
||||
__uint16_t __status;
|
||||
|
||||
__fnstsw(&__status);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&__mxcsr);
|
||||
else
|
||||
__mxcsr = 0;
|
||||
*__flagp = (__mxcsr | __status) & __excepts;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
|
||||
int feraiseexcept(int __excepts);
|
||||
|
||||
static __inline int
|
||||
fetestexcept(int __excepts)
|
||||
{
|
||||
__uint32_t __mxcsr;
|
||||
__uint16_t __status;
|
||||
|
||||
__fnstsw(&__status);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&__mxcsr);
|
||||
else
|
||||
__mxcsr = 0;
|
||||
return ((__status | __mxcsr) & __excepts);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
fegetround(void)
|
||||
{
|
||||
__uint16_t __control;
|
||||
|
||||
/*
|
||||
* We assume that the x87 and the SSE unit agree on the
|
||||
* rounding mode. Reading the control word on the x87 turns
|
||||
* out to be about 5 times faster than reading it on the SSE
|
||||
* unit on an Opteron 244.
|
||||
*/
|
||||
__fnstcw(&__control);
|
||||
return (__control & _ROUND_MASK);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
fesetround(int __round)
|
||||
{
|
||||
__uint32_t __mxcsr;
|
||||
__uint16_t __control;
|
||||
|
||||
if (__round & ~_ROUND_MASK)
|
||||
return (-1);
|
||||
|
||||
__fnstcw(&__control);
|
||||
__control &= ~_ROUND_MASK;
|
||||
__control |= __round;
|
||||
__fldcw(__control);
|
||||
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&__mxcsr);
|
||||
__mxcsr &= ~(_ROUND_MASK << _SSE_ROUND_SHIFT);
|
||||
__mxcsr |= __round << _SSE_ROUND_SHIFT;
|
||||
__ldmxcsr(__mxcsr);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fegetenv(fenv_t *__envp);
|
||||
int feholdexcept(fenv_t *__envp);
|
||||
|
||||
static __inline int
|
||||
fesetenv(const fenv_t *__envp)
|
||||
{
|
||||
fenv_t __env = *__envp;
|
||||
__uint32_t __mxcsr;
|
||||
|
||||
__mxcsr = __get_mxcsr(__env);
|
||||
__set_mxcsr(__env, 0xffffffff);
|
||||
/*
|
||||
* XXX Using fldenvx() instead of fldenv() tells the compiler that this
|
||||
* instruction clobbers the i387 register stack. This happens because
|
||||
* we restore the tag word from the saved environment. Normally, this
|
||||
* would happen anyway and we wouldn't care, because the ABI allows
|
||||
* function calls to clobber the i387 regs. However, fesetenv() is
|
||||
* inlined, so we need to be more careful.
|
||||
*/
|
||||
__fldenvx(__env);
|
||||
if (__HAS_SSE())
|
||||
__ldmxcsr(__mxcsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int feupdateenv(const fenv_t *__envp);
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
|
||||
int feenableexcept(int __mask);
|
||||
int fedisableexcept(int __mask);
|
||||
|
||||
static __inline int
|
||||
fegetexcept(void)
|
||||
{
|
||||
__uint16_t __control;
|
||||
|
||||
/*
|
||||
* We assume that the masks for the x87 and the SSE unit are
|
||||
* the same.
|
||||
*/
|
||||
__fnstcw(&__control);
|
||||
return (~__control & FE_ALL_EXCEPT);
|
||||
}
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_FENV_H_ */
|
86
i387/invtrig.c
Normal file
86
i387/invtrig.c
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 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 <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/invtrig.c,v 1.1 2008/08/02 03:56:22 das Exp $");
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define STRUCT_DECLS
|
||||
#include "invtrig.h"
|
||||
|
||||
/*
|
||||
* asinl() and acosl()
|
||||
*/
|
||||
const LONGDOUBLE
|
||||
pS0 = { 0xaaaaaaaaaaaaaaa8ULL, 0x3ffcU }, /* 1.66666666666666666631e-01L */
|
||||
pS1 = { 0xd5271b6699b48bfaULL, 0xbffdU }, /* -4.16313987993683104320e-01L */
|
||||
pS2 = { 0xbcf67ca9e9f669cfULL, 0x3ffdU }, /* 3.69068046323246813704e-01L */
|
||||
pS3 = { 0x8b7baa3d15f9830dULL, 0xbffcU }, /* -1.36213932016738603108e-01L */
|
||||
pS4 = { 0x92154b093a3bff1cULL, 0x3ff9U }, /* 1.78324189708471965733e-02L */
|
||||
pS5 = { 0xe5dd76401964508cULL, 0xbff2U }, /* -2.19216428382605211588e-04L */
|
||||
pS6 = { 0xee69c5b0fdb76951ULL, 0xbfedU }, /* -7.10526623669075243183e-06L */
|
||||
qS1 = { 0xbcaa2159c01436a0ULL, 0xc000U }, /* -2.94788392796209867269e+00L */
|
||||
qS2 = { 0xd17a73d1e1564c29ULL, 0x4000U }, /* 3.27309890266528636716e+00L */
|
||||
qS3 = { 0xd767e411c9cf4c2cULL, 0xbfffU }, /* -1.68285799854822427013e+00L */
|
||||
qS4 = { 0xc809c0dfb9b0d0b7ULL, 0x3ffdU }, /* 3.90699412641738801874e-01L */
|
||||
qS5 = { 0x80c3a2197c8ced57ULL, 0xbffaU }; /* -3.14365703596053263322e-02L */
|
||||
|
||||
/*
|
||||
* atanl()
|
||||
*/
|
||||
const LONGDOUBLE atanhi[] = {
|
||||
{ 0xed63382b0dda7b45ULL, 0x3ffdU }, /* 4.63647609000806116202e-01L */
|
||||
{ 0xc90fdaa22168c235ULL, 0x3ffeU }, /* 7.85398163397448309628e-01L */
|
||||
{ 0xfb985e940fb4d900ULL, 0x3ffeU }, /* 9.82793723247329067960e-01L */
|
||||
{ 0xc90fdaa22168c235ULL, 0x3fffU }, /* 1.57079632679489661926e+00L */
|
||||
};
|
||||
|
||||
const LONGDOUBLE atanlo[] = {
|
||||
{ 0xdfc88bd978751a07ULL, 0x3fbcU }, /* 1.18469937025062860669e-20L */
|
||||
{ 0xece675d1fc8f8cbbULL, 0xbfbcU }, /* -1.25413940316708300586e-20L */
|
||||
{ 0xf10f5e197793c283ULL, 0x3fbdU }, /* 2.55232234165405176172e-20L */
|
||||
{ 0xece675d1fc8f8cbbULL, 0xbfbdU }, /* -2.50827880633416601173e-20L */
|
||||
};
|
||||
|
||||
const LONGDOUBLE aT[] = {
|
||||
{ 0xaaaaaaaaaaaaaa9fULL, 0x3ffdU }, /* 3.33333333333333333017e-01L */
|
||||
{ 0xcccccccccccc62bcULL, 0xbffcU }, /* -1.99999999999999632011e-01L */
|
||||
{ 0x9249249248b81e3fULL, 0x3ffcU }, /* 1.42857142857046531280e-01L */
|
||||
{ 0xe38e38e3316f3de5ULL, 0xbffbU }, /* -1.11111111100562372733e-01L */
|
||||
{ 0xba2e8b8dc280726aULL, 0x3ffbU }, /* 9.09090902935647302252e-02L */
|
||||
{ 0x9d89d5b4c6847ec4ULL, 0xbffbU }, /* -7.69230552476207730353e-02L */
|
||||
{ 0x8888461d3099c677ULL, 0x3ffbU }, /* 6.66661718042406260546e-02L */
|
||||
{ 0xf0e8ee0f5328dc29ULL, 0xbffaU }, /* -5.88158892835030888692e-02L */
|
||||
{ 0xd73ea84d24bae54aULL, 0x3ffaU }, /* 5.25499891539726639379e-02L */
|
||||
{ 0xc08fa381dcd9213aULL, 0xbffaU }, /* -4.70119845393155721494e-02L */
|
||||
{ 0xa54a26f4095f2a3aULL, 0x3ffaU }, /* 4.03539201366454414072e-02L */
|
||||
{ 0xeea2d8d059ef3ad6ULL, 0xbff9U }, /* -2.91303858419364158725e-02L */
|
||||
{ 0xcc82292ab894b051ULL, 0x3ff8U }, /* 1.24822046299269234080e-02L */
|
||||
};
|
||||
|
||||
const LONGDOUBLE
|
||||
pi_lo = { 0xece675d1fc8f8cbbULL, 0xbfbeU }; /* -5.01655761266833202345e-20L */
|
60
i387/s_ceil.S
Normal file
60
i387/s_ceil.S
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_ceil.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(ceil)
|
||||
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 */
|
||||
|
||||
fldl 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(ceil)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
32
i387/s_ceilf.S
Normal file
32
i387/s_ceilf.S
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_ceilf.S,v 1.4 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_ceilf.S,v 1.3 1995/05/08 23:52:44 jtc Exp $") */
|
||||
|
||||
ENTRY(ceilf)
|
||||
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 */
|
||||
|
||||
flds 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(ceilf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
30
i387/s_ceill.S
Normal file
30
i387/s_ceill.S
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_ceill.S,v 1.3 2011/01/07 16:13:12 kib 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
|
||||
END(ceill)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
50
i387/s_copysign.S
Normal file
50
i387/s_copysign.S
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_copysign.S,v 1.9 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(copysign)
|
||||
movl 16(%esp),%edx
|
||||
andl $0x80000000,%edx
|
||||
movl 8(%esp),%eax
|
||||
andl $0x7fffffff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,8(%esp)
|
||||
fldl 4(%esp)
|
||||
ret
|
||||
END(copysign)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
22
i387/s_copysignf.S
Normal file
22
i387/s_copysignf.S
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_copysignf.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_copysignf.S,v 1.3 1995/05/08 23:53:25 jtc Exp $") */
|
||||
|
||||
ENTRY(copysignf)
|
||||
movl 8(%esp),%edx
|
||||
andl $0x80000000,%edx
|
||||
movl 4(%esp),%eax
|
||||
andl $0x7fffffff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,4(%esp)
|
||||
flds 4(%esp)
|
||||
ret
|
||||
END(copysignf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
20
i387/s_copysignl.S
Normal file
20
i387/s_copysignl.S
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_copysignl.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(copysignl)
|
||||
movl 24(%esp),%edx
|
||||
andl $0x8000,%edx
|
||||
movl 12(%esp),%eax
|
||||
andl $0x7fff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,12(%esp)
|
||||
fldt 4(%esp)
|
||||
ret
|
||||
END(copysignl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
58
i387/s_cos.S
Normal file
58
i387/s_cos.S
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_cos.S,v 1.9 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(cos)
|
||||
fldl 4(%esp)
|
||||
fcos
|
||||
fnstsw %ax
|
||||
andw $0x400,%ax
|
||||
jnz 1f
|
||||
ret
|
||||
1: fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem1
|
||||
fnstsw %ax
|
||||
andw $0x400,%ax
|
||||
jnz 2b
|
||||
fstp %st(1)
|
||||
fcos
|
||||
ret
|
||||
END(cos)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
48
i387/s_finite.S
Normal file
48
i387/s_finite.S
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_finite.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(finite)
|
||||
movl 8(%esp),%eax
|
||||
andl $0x7ff00000, %eax
|
||||
cmpl $0x7ff00000, %eax
|
||||
setneb %al
|
||||
andl $0x000000ff, %eax
|
||||
ret
|
||||
END(finite)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
60
i387/s_floor.S
Normal file
60
i387/s_floor.S
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_floor.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(floor)
|
||||
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 */
|
||||
|
||||
fldl 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(floor)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
32
i387/s_floorf.S
Normal file
32
i387/s_floorf.S
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_floorf.S,v 1.4 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_floorf.S,v 1.3 1995/05/09 00:04:32 jtc Exp $") */
|
||||
|
||||
ENTRY(floorf)
|
||||
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 */
|
||||
|
||||
flds 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(floorf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
30
i387/s_floorl.S
Normal file
30
i387/s_floorl.S
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_floorl.S,v 1.3 2011/01/07 16:13:12 kib 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
|
||||
END(floorl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
39
i387/s_llrint.S
Normal file
39
i387/s_llrint.S
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_llrint.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(llrint)
|
||||
fldl 4(%esp)
|
||||
subl $8,%esp
|
||||
fistpll (%esp)
|
||||
popl %eax
|
||||
popl %edx
|
||||
ret
|
||||
END(llrint)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
39
i387/s_llrintf.S
Normal file
39
i387/s_llrintf.S
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_llrintf.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(llrintf)
|
||||
flds 4(%esp)
|
||||
subl $8,%esp
|
||||
fistpll (%esp)
|
||||
popl %eax
|
||||
popl %edx
|
||||
ret
|
||||
END(llrintf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
38
i387/s_llrintl.S
Normal file
38
i387/s_llrintl.S
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_llrintl.S,v 1.2 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(llrintl)
|
||||
fldt 4(%esp)
|
||||
subl $8,%esp
|
||||
fistpll (%esp)
|
||||
popl %eax
|
||||
popl %edx
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
46
i387/s_logb.S
Normal file
46
i387/s_logb.S
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_logb.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(logb)
|
||||
fldl 4(%esp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
END(logb)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
18
i387/s_logbf.S
Normal file
18
i387/s_logbf.S
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_logbf.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_logbf.S,v 1.3 1995/05/09 00:15:12 jtc Exp $") */
|
||||
|
||||
ENTRY(logbf)
|
||||
flds 4(%esp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
END(logbf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
45
i387/s_logbl.S
Normal file
45
i387/s_logbl.S
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_logbl.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(logbl)
|
||||
fldt 4(%esp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
38
i387/s_lrint.S
Normal file
38
i387/s_lrint.S
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_lrint.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(lrint)
|
||||
fldl 4(%esp)
|
||||
subl $4,%esp
|
||||
fistpl (%esp)
|
||||
popl %eax
|
||||
ret
|
||||
END(lrint)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
38
i387/s_lrintf.S
Normal file
38
i387/s_lrintf.S
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*-
|
||||
* 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_lrintf.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(lrintf)
|
||||
flds 4(%esp)
|
||||
subl $4,%esp
|
||||
fistpl (%esp)
|
||||
popl %eax
|
||||
ret
|
||||
END(lrintf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
37
i387/s_lrintl.S
Normal file
37
i387/s_lrintl.S
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 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>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_lrintl.S,v 1.2 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(lrintl)
|
||||
fldt 4(%esp)
|
||||
subl $4,%esp
|
||||
fistpl (%esp)
|
||||
popl %eax
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
65
i387/s_remquo.S
Normal file
65
i387/s_remquo.S
Normal file
|
@ -0,0 +1,65 @@
|
|||
/*-
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_remquo.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(remquo)
|
||||
fldl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 16(%esp),%ecx
|
||||
xorl 8(%esp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl 20(%esp),%ecx
|
||||
movl %eax,(%ecx)
|
||||
ret
|
||||
END(remquo)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
65
i387/s_remquof.S
Normal file
65
i387/s_remquof.S
Normal file
|
@ -0,0 +1,65 @@
|
|||
/*-
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_remquof.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(remquof)
|
||||
flds 8(%esp)
|
||||
flds 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 8(%esp),%ecx
|
||||
xorl 4(%esp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl 12(%esp),%ecx
|
||||
movl %eax,(%ecx)
|
||||
ret
|
||||
END(remquof)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
65
i387/s_remquol.S
Normal file
65
i387/s_remquol.S
Normal file
|
@ -0,0 +1,65 @@
|
|||
/*-
|
||||
* Copyright (c) 2005-2008 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_remquol.S,v 1.2 2011/01/07 16:13:12 kib Exp $");
|
||||
|
||||
ENTRY(remquol)
|
||||
fldt 16(%esp)
|
||||
fldt 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 24(%esp),%ecx
|
||||
xorl 12(%esp),%ecx
|
||||
movsx %cx,%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl 28(%esp),%ecx
|
||||
movl %eax,(%ecx)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
45
i387/s_rint.S
Normal file
45
i387/s_rint.S
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_rint.S,v 1.9 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(rint)
|
||||
fldl 4(%esp)
|
||||
frndint
|
||||
ret
|
||||
END(rint)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
17
i387/s_rintf.S
Normal file
17
i387/s_rintf.S
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_rintf.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_rintf.S,v 1.3 1995/05/09 00:17:22 jtc Exp $") */
|
||||
|
||||
ENTRY(rintf)
|
||||
flds 4(%esp)
|
||||
frndint
|
||||
ret
|
||||
END(rintf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
44
i387/s_rintl.S
Normal file
44
i387/s_rintl.S
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_rintl.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(rintl)
|
||||
fldt 4(%esp)
|
||||
frndint
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
47
i387/s_scalbn.S
Normal file
47
i387/s_scalbn.S
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_scalbn.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(scalbn)
|
||||
fildl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(scalbn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
22
i387/s_scalbnf.S
Normal file
22
i387/s_scalbnf.S
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_scalbnf.S,v 1.4 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */
|
||||
|
||||
ENTRY(scalbnf)
|
||||
fildl 8(%esp)
|
||||
flds 4(%esp)
|
||||
fscale
|
||||
fstp %st(1) /* bug fix for fp stack overflow */
|
||||
ret
|
||||
END(scalbnf)
|
||||
|
||||
.globl CNAME(ldexpf)
|
||||
.set CNAME(ldexpf),CNAME(scalbnf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
22
i387/s_scalbnl.S
Normal file
22
i387/s_scalbnl.S
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_scalbnl.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */
|
||||
|
||||
ENTRY(scalbnl)
|
||||
fildl 16(%esp)
|
||||
fldt 4(%esp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(scalbnl)
|
||||
|
||||
.globl CNAME(ldexpl)
|
||||
.set CNAME(ldexpl),CNAME(scalbnl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
46
i387/s_significand.S
Normal file
46
i387/s_significand.S
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_significand.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(significand)
|
||||
fldl 4(%esp)
|
||||
fxtract
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(significand)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
18
i387/s_significandf.S
Normal file
18
i387/s_significandf.S
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_significandf.S,v 1.3 2011/01/07 16:13:12 kib Exp $");
|
||||
/* RCSID("$NetBSD: s_significandf.S,v 1.3 1995/05/09 00:24:07 jtc Exp $") */
|
||||
|
||||
ENTRY(significandf)
|
||||
flds 4(%esp)
|
||||
fxtract
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(significandf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
58
i387/s_sin.S
Normal file
58
i387/s_sin.S
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_sin.S,v 1.9 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(sin)
|
||||
fldl 4(%esp)
|
||||
fsin
|
||||
fnstsw %ax
|
||||
andw $0x400,%ax
|
||||
jnz 1f
|
||||
ret
|
||||
1: fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem1
|
||||
fnstsw %ax
|
||||
andw $0x400,%ax
|
||||
jnz 2b
|
||||
fstp %st(1)
|
||||
fsin
|
||||
ret
|
||||
END(sin)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
60
i387/s_tan.S
Normal file
60
i387/s_tan.S
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_tan.S,v 1.9 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(tan)
|
||||
fldl 4(%esp)
|
||||
fptan
|
||||
fnstsw %ax
|
||||
andw $0x400,%ax
|
||||
jnz 1f
|
||||
fstp %st(0)
|
||||
ret
|
||||
1: fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem1
|
||||
fstsw %ax
|
||||
andw $0x400,%ax
|
||||
jnz 2b
|
||||
fstp %st(1)
|
||||
fptan
|
||||
fstp %st(0)
|
||||
ret
|
||||
END(tan)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
29
i387/s_trunc.S
Normal file
29
i387/s_trunc.S
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_trunc.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(trunc)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0c00,%dx /* round towards -oo */
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
fldl 8(%ebp) /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(trunc)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
29
i387/s_truncf.S
Normal file
29
i387/s_truncf.S
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_truncf.S,v 1.4 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(truncf)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0c00,%dx /* round towards -oo */
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
flds 8(%ebp) /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(truncf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
29
i387/s_truncl.S
Normal file
29
i387/s_truncl.S
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD: src/lib/msun/i387/s_truncl.S,v 1.3 2011/01/07 16:13:12 kib Exp $")
|
||||
|
||||
ENTRY(truncl)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0c00,%dx /* round towards -oo */
|
||||
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
|
||||
END(truncl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
55
include/amd64_fpmath.h
Normal file
55
include/amd64_fpmath.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*-
|
||||
* Copyright (c) 2002, 2003 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/libc/amd64/_fpmath.h,v 1.7 2008/01/17 16:39:06 bde Exp $
|
||||
*/
|
||||
|
||||
union IEEEl2bits {
|
||||
long double e;
|
||||
struct {
|
||||
unsigned int manl :32;
|
||||
unsigned int manh :32;
|
||||
unsigned int exp :15;
|
||||
unsigned int sign :1;
|
||||
unsigned int junkl :16;
|
||||
unsigned int junkh :32;
|
||||
} bits;
|
||||
struct {
|
||||
unsigned long man :64;
|
||||
unsigned int expsign :16;
|
||||
unsigned long junk :48;
|
||||
} xbits;
|
||||
};
|
||||
|
||||
#define LDBL_NBIT 0x80000000
|
||||
#define mask_nbit_l(u) ((u).bits.manh &= ~LDBL_NBIT)
|
||||
|
||||
#define LDBL_MANH_SIZE 32
|
||||
#define LDBL_MANL_SIZE 32
|
||||
|
||||
#define LDBL_TO_ARRAY32(u, a) do { \
|
||||
(a)[0] = (uint32_t)(u).bits.manl; \
|
||||
(a)[1] = (uint32_t)(u).bits.manh; \
|
||||
} while (0)
|
87
include/fpmath.h
Normal file
87
include/fpmath.h
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*-
|
||||
* Copyright (c) 2003 Mike Barcroft <mike@FreeBSD.org>
|
||||
* Copyright (c) 2002 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/libc/include/fpmath.h,v 1.4 2008/12/23 22:20:59 marcel Exp $
|
||||
*/
|
||||
|
||||
#ifdef __LP64__
|
||||
#include "amd64_fpmath.h"
|
||||
#else
|
||||
#include "i386_fpmath.h"
|
||||
#endif
|
||||
|
||||
#ifdef __linux
|
||||
#include <features.h>
|
||||
#include <endian.h>
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
|
||||
#ifndef _IEEE_WORD_ORDER
|
||||
#define _IEEE_WORD_ORDER _BYTE_ORDER
|
||||
#endif
|
||||
|
||||
union IEEEf2bits {
|
||||
float f;
|
||||
struct {
|
||||
#if _BYTE_ORDER == _LITTLE_ENDIAN
|
||||
unsigned int man :23;
|
||||
unsigned int exp :8;
|
||||
unsigned int sign :1;
|
||||
#else /* _BIG_ENDIAN */
|
||||
unsigned int sign :1;
|
||||
unsigned int exp :8;
|
||||
unsigned int man :23;
|
||||
#endif
|
||||
} bits;
|
||||
};
|
||||
|
||||
#define DBL_MANH_SIZE 20
|
||||
#define DBL_MANL_SIZE 32
|
||||
|
||||
union IEEEd2bits {
|
||||
double d;
|
||||
struct {
|
||||
#if _BYTE_ORDER == _LITTLE_ENDIAN
|
||||
#if _IEEE_WORD_ORDER == _LITTLE_ENDIAN
|
||||
unsigned int manl :32;
|
||||
#endif
|
||||
unsigned int manh :20;
|
||||
unsigned int exp :11;
|
||||
unsigned int sign :1;
|
||||
#if _IEEE_WORD_ORDER == _BIG_ENDIAN
|
||||
unsigned int manl :32;
|
||||
#endif
|
||||
#else /* _BIG_ENDIAN */
|
||||
unsigned int sign :1;
|
||||
unsigned int exp :11;
|
||||
unsigned int manh :20;
|
||||
unsigned int manl :32;
|
||||
#endif
|
||||
} bits;
|
||||
};
|
54
include/i386_fpmath.h
Normal file
54
include/i386_fpmath.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*-
|
||||
* Copyright (c) 2002, 2003 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/libc/i386/_fpmath.h,v 1.6 2008/01/17 16:39:06 bde Exp $
|
||||
*/
|
||||
|
||||
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;
|
||||
struct {
|
||||
unsigned long long man :64;
|
||||
unsigned int expsign :16;
|
||||
unsigned int junk :16;
|
||||
} xbits;
|
||||
};
|
||||
|
||||
#define LDBL_NBIT 0x80000000
|
||||
#define mask_nbit_l(u) ((u).bits.manh &= ~LDBL_NBIT)
|
||||
|
||||
#define LDBL_MANH_SIZE 32
|
||||
#define LDBL_MANL_SIZE 32
|
||||
|
||||
#define LDBL_TO_ARRAY32(u, a) do { \
|
||||
(a)[0] = (uint32_t)(u).bits.manl; \
|
||||
(a)[1] = (uint32_t)(u).bits.manh; \
|
||||
} while (0)
|
140
ld128/e_rem_pio2l.h
Normal file
140
ld128/e_rem_pio2l.h
Normal file
|
@ -0,0 +1,140 @@
|
|||
/* From: @(#)e_rem_pio2.c 1.4 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
* Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
* Optimized by Bruce D. Evans.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
|
||||
/* ld128 version of __ieee754_rem_pio2l(x,y)
|
||||
*
|
||||
* return the remainder of x rem pi/2 in y[0]+y[1]
|
||||
* use __kernel_rem_pio2()
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "openlibm.h"
|
||||
#include "math_private.h"
|
||||
#include "fpmath.h"
|
||||
|
||||
#define BIAS (LDBL_MAX_EXP - 1)
|
||||
|
||||
/*
|
||||
* XXX need to verify that nonzero integer multiples of pi/2 within the
|
||||
* range get no closer to a long double than 2**-140, or that
|
||||
* ilogb(x) + ilogb(min_delta) < 45 - -140.
|
||||
*/
|
||||
/*
|
||||
* invpio2: 113 bits of 2/pi
|
||||
* pio2_1: first 68 bits of pi/2
|
||||
* pio2_1t: pi/2 - pio2_1
|
||||
* pio2_2: second 68 bits of pi/2
|
||||
* pio2_2t: pi/2 - (pio2_1+pio2_2)
|
||||
* pio2_3: third 68 bits of pi/2
|
||||
* pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
|
||||
*/
|
||||
|
||||
static const double
|
||||
zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */
|
||||
two24 = 1.67772160000000000000e+07; /* 0x41700000, 0x00000000 */
|
||||
|
||||
static const long double
|
||||
invpio2 = 6.3661977236758134307553505349005747e-01L, /* 0x145f306dc9c882a53f84eafa3ea6a.0p-113 */
|
||||
pio2_1 = 1.5707963267948966192292994253909555e+00L, /* 0x1921fb54442d18469800000000000.0p-112 */
|
||||
pio2_1t = 2.0222662487959507323996846200947577e-21L, /* 0x13198a2e03707344a4093822299f3.0p-181 */
|
||||
pio2_2 = 2.0222662487959507323994779168837751e-21L, /* 0x13198a2e03707344a400000000000.0p-181 */
|
||||
pio2_2t = 2.0670321098263988236496903051604844e-43L, /* 0x127044533e63a0105df531d89cd91.0p-254 */
|
||||
pio2_3 = 2.0670321098263988236499468110329591e-43L, /* 0x127044533e63a0105e00000000000.0p-254 */
|
||||
pio2_3t = -2.5650587247459238361625433492959285e-65L; /* -0x159c4ec64ddaeb5f78671cbfb2210.0p-327 */
|
||||
|
||||
static inline __always_inline int
|
||||
__ieee754_rem_pio2l(long double x, long double *y)
|
||||
{
|
||||
union IEEEl2bits u,u1;
|
||||
long double z,w,t,r,fn;
|
||||
double tx[5],ty[3];
|
||||
int64_t n;
|
||||
int e0,ex,i,j,nx;
|
||||
int16_t expsign;
|
||||
|
||||
u.e = x;
|
||||
expsign = u.xbits.expsign;
|
||||
ex = expsign & 0x7fff;
|
||||
if (ex < BIAS + 45 || ex == BIAS + 45 &&
|
||||
u.bits.manh < 0x921fb54442d1LL) {
|
||||
/* |x| ~< 2^45*(pi/2), medium size */
|
||||
/* Use a specialized rint() to get fn. Assume round-to-nearest. */
|
||||
fn = x*invpio2+0x1.8p112;
|
||||
fn = fn-0x1.8p112;
|
||||
#ifdef HAVE_EFFICIENT_I64RINT
|
||||
n = i64rint(fn);
|
||||
#else
|
||||
n = fn;
|
||||
#endif
|
||||
r = x-fn*pio2_1;
|
||||
w = fn*pio2_1t; /* 1st round good to 180 bit */
|
||||
{
|
||||
union IEEEl2bits u2;
|
||||
int ex1;
|
||||
j = ex;
|
||||
y[0] = r-w;
|
||||
u2.e = y[0];
|
||||
ex1 = u2.xbits.expsign & 0x7fff;
|
||||
i = j-ex1;
|
||||
if(i>51) { /* 2nd iteration needed, good to 248 */
|
||||
t = r;
|
||||
w = fn*pio2_2;
|
||||
r = t-w;
|
||||
w = fn*pio2_2t-((t-r)-w);
|
||||
y[0] = r-w;
|
||||
u2.e = y[0];
|
||||
ex1 = u2.xbits.expsign & 0x7fff;
|
||||
i = j-ex1;
|
||||
if(i>119) { /* 3rd iteration need, 316 bits acc */
|
||||
t = r; /* will cover all possible cases */
|
||||
w = fn*pio2_3;
|
||||
r = t-w;
|
||||
w = fn*pio2_3t-((t-r)-w);
|
||||
y[0] = r-w;
|
||||
}
|
||||
}
|
||||
}
|
||||
y[1] = (r-y[0])-w;
|
||||
return n;
|
||||
}
|
||||
/*
|
||||
* all other (large) arguments
|
||||
*/
|
||||
if(ex==0x7fff) { /* x is inf or NaN */
|
||||
y[0]=y[1]=x-x; return 0;
|
||||
}
|
||||
/* set z = scalbn(|x|,ilogb(x)-23) */
|
||||
u1.e = x;
|
||||
e0 = ex - BIAS - 23; /* e0 = ilogb(|x|)-23; */
|
||||
u1.xbits.expsign = ex - e0;
|
||||
z = u1.e;
|
||||
for(i=0;i<4;i++) {
|
||||
tx[i] = (double)((int32_t)(z));
|
||||
z = (z-tx[i])*two24;
|
||||
}
|
||||
tx[4] = z;
|
||||
nx = 5;
|
||||
while(tx[nx-1]==zero) nx--; /* skip zero term */
|
||||
n = __kernel_rem_pio2(tx,ty,e0,nx,3);
|
||||
t = (long double)ty[2] + ty[1];
|
||||
r = t + ty[0];
|
||||
w = ty[0] - (r - t);
|
||||
if(expsign<0) {y[0] = -r; y[1] = -w; return -n;}
|
||||
y[0] = r; y[1] = w; return n;
|
||||
}
|
100
ld128/invtrig.c
Normal file
100
ld128/invtrig.c
Normal file
|
@ -0,0 +1,100 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 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 <sys/cdefs.h>
|
||||
|
||||
|
||||
#include "invtrig.h"
|
||||
|
||||
/*
|
||||
* asinl() and acosl()
|
||||
*/
|
||||
const long double
|
||||
pS0 = 1.66666666666666666666666666666700314e-01L,
|
||||
pS1 = -7.32816946414566252574527475428622708e-01L,
|
||||
pS2 = 1.34215708714992334609030036562143589e+00L,
|
||||
pS3 = -1.32483151677116409805070261790752040e+00L,
|
||||
pS4 = 7.61206183613632558824485341162121989e-01L,
|
||||
pS5 = -2.56165783329023486777386833928147375e-01L,
|
||||
pS6 = 4.80718586374448793411019434585413855e-02L,
|
||||
pS7 = -4.42523267167024279410230886239774718e-03L,
|
||||
pS8 = 1.44551535183911458253205638280410064e-04L,
|
||||
pS9 = -2.10558957916600254061591040482706179e-07L,
|
||||
qS1 = -4.84690167848739751544716485245697428e+00L,
|
||||
qS2 = 9.96619113536172610135016921140206980e+00L,
|
||||
qS3 = -1.13177895428973036660836798461641458e+01L,
|
||||
qS4 = 7.74004374389488266169304117714658761e+00L,
|
||||
qS5 = -3.25871986053534084709023539900339905e+00L,
|
||||
qS6 = 8.27830318881232209752469022352928864e-01L,
|
||||
qS7 = -1.18768052702942805423330715206348004e-01L,
|
||||
qS8 = 8.32600764660522313269101537926539470e-03L,
|
||||
qS9 = -1.99407384882605586705979504567947007e-04L;
|
||||
|
||||
/*
|
||||
* atanl()
|
||||
*/
|
||||
const long double atanhi[] = {
|
||||
4.63647609000806116214256231461214397e-01L,
|
||||
7.85398163397448309615660845819875699e-01L,
|
||||
9.82793723247329067985710611014666038e-01L,
|
||||
1.57079632679489661923132169163975140e+00L,
|
||||
};
|
||||
|
||||
const long double atanlo[] = {
|
||||
4.89509642257333492668618435220297706e-36L,
|
||||
2.16795253253094525619926100651083806e-35L,
|
||||
-2.31288434538183565909319952098066272e-35L,
|
||||
4.33590506506189051239852201302167613e-35L,
|
||||
};
|
||||
|
||||
const long double aT[] = {
|
||||
3.33333333333333333333333333333333125e-01L,
|
||||
-1.99999999999999999999999999999180430e-01L,
|
||||
1.42857142857142857142857142125269827e-01L,
|
||||
-1.11111111111111111111110834490810169e-01L,
|
||||
9.09090909090909090908522355708623681e-02L,
|
||||
-7.69230769230769230696553844935357021e-02L,
|
||||
6.66666666666666660390096773046256096e-02L,
|
||||
-5.88235294117646671706582985209643694e-02L,
|
||||
5.26315789473666478515847092020327506e-02L,
|
||||
-4.76190476189855517021024424991436144e-02L,
|
||||
4.34782608678695085948531993458097026e-02L,
|
||||
-3.99999999632663469330634215991142368e-02L,
|
||||
3.70370363987423702891250829918659723e-02L,
|
||||
-3.44827496515048090726669907612335954e-02L,
|
||||
3.22579620681420149871973710852268528e-02L,
|
||||
-3.03020767654269261041647570626778067e-02L,
|
||||
2.85641979882534783223403715930946138e-02L,
|
||||
-2.69824879726738568189929461383741323e-02L,
|
||||
2.54194698498808542954187110873675769e-02L,
|
||||
-2.35083879708189059926183138130183215e-02L,
|
||||
2.04832358998165364349957325067131428e-02L,
|
||||
-1.54489555488544397858507248612362957e-02L,
|
||||
8.64492360989278761493037861575248038e-03L,
|
||||
-2.58521121597609872727919154569765469e-03L,
|
||||
};
|
||||
|
||||
const long double pi_lo = 8.67181013012378102479704402604335225e-35L;
|
113
ld128/invtrig.h
Normal file
113
ld128/invtrig.h
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/msun/ld128/invtrig.h,v 1.1 2008/07/31 22:41:26 das Exp $
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
#define BIAS (LDBL_MAX_EXP - 1)
|
||||
#define MANH_SIZE (LDBL_MANH_SIZE + 1)
|
||||
|
||||
/* Approximation thresholds. */
|
||||
#define ASIN_LINEAR (BIAS - 56) /* 2**-56 */
|
||||
#define ACOS_CONST (BIAS - 113) /* 2**-113 */
|
||||
#define ATAN_CONST (BIAS + 113) /* 2**113 */
|
||||
#define ATAN_LINEAR (BIAS - 56) /* 2**-56 */
|
||||
|
||||
/* 0.95 */
|
||||
#define THRESH ((0xe666666666666666ULL>>(64-(MANH_SIZE-1)))|LDBL_NBIT)
|
||||
|
||||
/* Constants shared by the long double inverse trig functions. */
|
||||
#define pS0 _ItL_pS0
|
||||
#define pS1 _ItL_pS1
|
||||
#define pS2 _ItL_pS2
|
||||
#define pS3 _ItL_pS3
|
||||
#define pS4 _ItL_pS4
|
||||
#define pS5 _ItL_pS5
|
||||
#define pS6 _ItL_pS6
|
||||
#define pS7 _ItL_pS7
|
||||
#define pS8 _ItL_pS8
|
||||
#define pS9 _ItL_pS9
|
||||
#define qS1 _ItL_qS1
|
||||
#define qS2 _ItL_qS2
|
||||
#define qS3 _ItL_qS3
|
||||
#define qS4 _ItL_qS4
|
||||
#define qS5 _ItL_qS5
|
||||
#define qS6 _ItL_qS6
|
||||
#define qS7 _ItL_qS7
|
||||
#define qS8 _ItL_qS8
|
||||
#define qS9 _ItL_qS9
|
||||
#define atanhi _ItL_atanhi
|
||||
#define atanlo _ItL_atanlo
|
||||
#define aT _ItL_aT
|
||||
#define pi_lo _ItL_pi_lo
|
||||
|
||||
#define pio2_hi atanhi[3]
|
||||
#define pio2_lo atanlo[3]
|
||||
#define pio4_hi atanhi[1]
|
||||
|
||||
/* Constants shared by the long double inverse trig functions. */
|
||||
extern const long double pS0, pS1, pS2, pS3, pS4, pS5, pS6, pS7, pS8, pS9;
|
||||
extern const long double qS1, qS2, qS3, qS4, qS5, qS6, qS7, qS8, qS9;
|
||||
extern const long double atanhi[], atanlo[], aT[];
|
||||
extern const long double pi_lo;
|
||||
|
||||
static inline long double
|
||||
P(long double x)
|
||||
{
|
||||
|
||||
return (x * (pS0 + x * (pS1 + x * (pS2 + x * (pS3 + x * \
|
||||
(pS4 + x * (pS5 + x * (pS6 + x * (pS7 + x * (pS8 + x * \
|
||||
pS9))))))))));
|
||||
}
|
||||
|
||||
static inline long double
|
||||
Q(long double x)
|
||||
{
|
||||
|
||||
return (1.0 + x * (qS1 + x * (qS2 + x * (qS3 + x * (qS4 + x * \
|
||||
(qS5 + x * (qS6 + x * (qS7 + x * (qS8 + x * qS9)))))))));
|
||||
}
|
||||
|
||||
static inline long double
|
||||
T_even(long double x)
|
||||
{
|
||||
|
||||
return (aT[0] + x * (aT[2] + x * (aT[4] + x * (aT[6] + x * \
|
||||
(aT[8] + x * (aT[10] + x * (aT[12] + x * (aT[14] + x * \
|
||||
(aT[16] + x * (aT[18] + x * (aT[20] + x * aT[22])))))))))));
|
||||
}
|
||||
|
||||
static inline long double
|
||||
T_odd(long double x)
|
||||
{
|
||||
|
||||
return (aT[1] + x * (aT[3] + x * (aT[5] + x * (aT[7] + x * \
|
||||
(aT[9] + x * (aT[11] + x * (aT[13] + x * (aT[15] + x * \
|
||||
(aT[17] + x * (aT[19] + x * (aT[21] + x * aT[23])))))))))));
|
||||
}
|
61
ld128/k_cosl.c
Normal file
61
ld128/k_cosl.c
Normal file
|
@ -0,0 +1,61 @@
|
|||
/* From: @(#)k_cos.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
* Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
|
||||
/*
|
||||
* ld128 version of k_cos.c. See ../src/k_cos.c for most comments.
|
||||
*/
|
||||
|
||||
#include "math_private.h"
|
||||
|
||||
/*
|
||||
* Domain [-0.7854, 0.7854], range ~[-1.80e-37, 1.79e-37]:
|
||||
* |cos(x) - c(x))| < 2**-122.0
|
||||
*
|
||||
* 113-bit precision requires more care than 64-bit precision, since
|
||||
* simple methods give a minimax polynomial with coefficient for x^2
|
||||
* that is 1 ulp below 0.5, but we want it to be precisely 0.5. See
|
||||
* ../ld80/k_cosl.c for more details.
|
||||
*/
|
||||
static const double
|
||||
one = 1.0;
|
||||
|
||||
static const long double
|
||||
C1 = 0.04166666666666666666666666666666658424671L,
|
||||
C2 = -0.001388888888888888888888888888863490893732L,
|
||||
C3 = 0.00002480158730158730158730158600795304914210L,
|
||||
C4 = -0.2755731922398589065255474947078934284324e-6L,
|
||||
C5 = 0.2087675698786809897659225313136400793948e-8L,
|
||||
C6 = -0.1147074559772972315817149986812031204775e-10L,
|
||||
C7 = 0.4779477332386808976875457937252120293400e-13L;
|
||||
|
||||
static const double
|
||||
C8 = -0.1561920696721507929516718307820958119868e-15,
|
||||
C9 = 0.4110317413744594971475941557607804508039e-18,
|
||||
C10 = -0.8896592467191938803288521958313920156409e-21,
|
||||
C11 = 0.1601061435794535138244346256065192782581e-23;
|
||||
|
||||
long double
|
||||
__kernel_cosl(long double x, long double y)
|
||||
{
|
||||
long double hz,z,r,w;
|
||||
|
||||
z = x*x;
|
||||
r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*(C6+z*(C7+
|
||||
z*(C8+z*(C9+z*(C10+z*C11))))))))));
|
||||
hz = 0.5*z;
|
||||
w = one-hz;
|
||||
return w + (((one-w)-hz) + (z*r-x*y));
|
||||
}
|
59
ld128/k_sinl.c
Normal file
59
ld128/k_sinl.c
Normal file
|
@ -0,0 +1,59 @@
|
|||
/* From: @(#)k_sin.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
* Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
|
||||
/*
|
||||
* ld128 version of k_sin.c. See ../src/k_sin.c for most comments.
|
||||
*/
|
||||
|
||||
#include "math_private.h"
|
||||
|
||||
static const double
|
||||
half = 0.5;
|
||||
|
||||
/*
|
||||
* Domain [-0.7854, 0.7854], range ~[-1.53e-37, 1.659e-37]
|
||||
* |sin(x)/x - s(x)| < 2**-122.1
|
||||
*
|
||||
* See ../ld80/k_cosl.c for more details about the polynomial.
|
||||
*/
|
||||
static const long double
|
||||
S1 = -0.16666666666666666666666666666666666606732416116558L,
|
||||
S2 = 0.0083333333333333333333333333333331135404851288270047L,
|
||||
S3 = -0.00019841269841269841269841269839935785325638310428717L,
|
||||
S4 = 0.27557319223985890652557316053039946268333231205686e-5L,
|
||||
S5 = -0.25052108385441718775048214826384312253862930064745e-7L,
|
||||
S6 = 0.16059043836821614596571832194524392581082444805729e-9L,
|
||||
S7 = -0.76471637318198151807063387954939213287488216303768e-12L,
|
||||
S8 = 0.28114572543451292625024967174638477283187397621303e-14L;
|
||||
|
||||
static const double
|
||||
S9 = -0.82206352458348947812512122163446202498005154296863e-17,
|
||||
S10 = 0.19572940011906109418080609928334380560135358385256e-19,
|
||||
S11 = -0.38680813379701966970673724299207480965452616911420e-22,
|
||||
S12 = 0.64038150078671872796678569586315881020659912139412e-25;
|
||||
|
||||
long double
|
||||
__kernel_sinl(long double x, long double y, int iy)
|
||||
{
|
||||
long double z,r,v;
|
||||
|
||||
z = x*x;
|
||||
v = z*x;
|
||||
r = S2+z*(S3+z*(S4+z*(S5+z*(S6+z*(S7+z*(S8+
|
||||
z*(S9+z*(S10+z*(S11+z*S12)))))))));
|
||||
if(iy==0) return x+v*(S1+z*r);
|
||||
else return x-((z*(half*y-v*r)-y)-v*S1);
|
||||
}
|
119
ld128/k_tanl.c
Normal file
119
ld128/k_tanl.c
Normal file
|
@ -0,0 +1,119 @@
|
|||
/* From: @(#)k_tan.c 1.5 04/04/22 SMI */
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
|
||||
* Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
|
||||
/*
|
||||
* ld128 version of k_tan.c. See ../src/k_tan.c for most comments.
|
||||
*/
|
||||
|
||||
#include "openlibm.h"
|
||||
#include "math_private.h"
|
||||
|
||||
/*
|
||||
* Domain [-0.67434, 0.67434], range ~[-3.37e-36, 1.982e-37]
|
||||
* |tan(x)/x - t(x)| < 2**-117.8 (XXX should be ~1e-37)
|
||||
*
|
||||
* See ../ld80/k_cosl.c for more details about the polynomial.
|
||||
*/
|
||||
static const long double
|
||||
T3 = 0x1.5555555555555555555555555553p-2L,
|
||||
T5 = 0x1.1111111111111111111111111eb5p-3L,
|
||||
T7 = 0x1.ba1ba1ba1ba1ba1ba1ba1b694cd6p-5L,
|
||||
T9 = 0x1.664f4882c10f9f32d6bbe09d8bcdp-6L,
|
||||
T11 = 0x1.226e355e6c23c8f5b4f5762322eep-7L,
|
||||
T13 = 0x1.d6d3d0e157ddfb5fed8e84e27b37p-9L,
|
||||
T15 = 0x1.7da36452b75e2b5fce9ee7c2c92ep-10L,
|
||||
T17 = 0x1.355824803674477dfcf726649efep-11L,
|
||||
T19 = 0x1.f57d7734d1656e0aceb716f614c2p-13L,
|
||||
T21 = 0x1.967e18afcb180ed942dfdc518d6cp-14L,
|
||||
T23 = 0x1.497d8eea21e95bc7e2aa79b9f2cdp-15L,
|
||||
T25 = 0x1.0b132d39f055c81be49eff7afd50p-16L,
|
||||
T27 = 0x1.b0f72d33eff7bfa2fbc1059d90b6p-18L,
|
||||
T29 = 0x1.5ef2daf21d1113df38d0fbc00267p-19L,
|
||||
T31 = 0x1.1c77d6eac0234988cdaa04c96626p-20L,
|
||||
T33 = 0x1.cd2a5a292b180e0bdd701057dfe3p-22L,
|
||||
T35 = 0x1.75c7357d0298c01a31d0a6f7d518p-23L,
|
||||
T37 = 0x1.2f3190f4718a9a520f98f50081fcp-24L,
|
||||
pio4 = 0x1.921fb54442d18469898cc51701b8p-1L,
|
||||
pio4lo = 0x1.cd129024e088a67cc74020bbea60p-116L;
|
||||
|
||||
static const double
|
||||
T39 = 0.000000028443389121318352, /* 0x1e8a7592977938.0p-78 */
|
||||
T41 = 0.000000011981013102001973, /* 0x19baa1b1223219.0p-79 */
|
||||
T43 = 0.0000000038303578044958070, /* 0x107385dfb24529.0p-80 */
|
||||
T45 = 0.0000000034664378216909893, /* 0x1dc6c702a05262.0p-81 */
|
||||
T47 = -0.0000000015090641701997785, /* -0x19ecef3569ebb6.0p-82 */
|
||||
T49 = 0.0000000029449552300483952, /* 0x194c0668da786a.0p-81 */
|
||||
T51 = -0.0000000022006995706097711, /* -0x12e763b8845268.0p-81 */
|
||||
T53 = 0.0000000015468200913196612, /* 0x1a92fc98c29554.0p-82 */
|
||||
T55 = -0.00000000061311613386849674, /* -0x151106cbc779a9.0p-83 */
|
||||
T57 = 1.4912469681508012e-10; /* 0x147edbdba6f43a.0p-85 */
|
||||
|
||||
long double
|
||||
__kernel_tanl(long double x, long double y, int iy) {
|
||||
long double z, r, v, w, s;
|
||||
long double osign;
|
||||
int i;
|
||||
|
||||
iy = (iy == 1 ? -1 : 1); /* XXX recover original interface */
|
||||
osign = (x >= 0 ? 1.0 : -1.0); /* XXX slow, probably wrong for -0 */
|
||||
if (fabsl(x) >= 0.67434) {
|
||||
if (x < 0) {
|
||||
x = -x;
|
||||
y = -y;
|
||||
}
|
||||
z = pio4 - x;
|
||||
w = pio4lo - y;
|
||||
x = z + w;
|
||||
y = 0.0;
|
||||
i = 1;
|
||||
} else
|
||||
i = 0;
|
||||
z = x * x;
|
||||
w = z * z;
|
||||
r = T5 + w * (T9 + w * (T13 + w * (T17 + w * (T21 +
|
||||
w * (T25 + w * (T29 + w * (T33 +
|
||||
w * (T37 + w * (T41 + w * (T45 + w * (T49 + w * (T53 +
|
||||
w * T57))))))))))));
|
||||
v = z * (T7 + w * (T11 + w * (T15 + w * (T19 + w * (T23 +
|
||||
w * (T27 + w * (T31 + w * (T35 +
|
||||
w * (T39 + w * (T43 + w * (T47 + w * (T51 + w * T55))))))))))));
|
||||
s = z * x;
|
||||
r = y + z * (s * (r + v) + y);
|
||||
r += T3 * s;
|
||||
w = x + r;
|
||||
if (i == 1) {
|
||||
v = (long double) iy;
|
||||
return osign *
|
||||
(v - 2.0 * (x - (w * w / (w + v) - r)));
|
||||
}
|
||||
if (iy == 1)
|
||||
return w;
|
||||
else {
|
||||
/*
|
||||
* if allow error up to 2 ulp, simply return
|
||||
* -1.0 / (x+r) here
|
||||
*/
|
||||
/* compute -1.0 / (x+r) accurately */
|
||||
long double a, t;
|
||||
z = w;
|
||||
z = z + 0x1p32 - 0x1p32;
|
||||
v = r - (z - x); /* z+v = r+x */
|
||||
t = a = -1.0 / w; /* a = -1.0/w */
|
||||
t = t + 0x1p32 - 0x1p32;
|
||||
s = 1.0 + t * z;
|
||||
return t + a * (s + t * v);
|
||||
}
|
||||
}
|
430
ld128/s_exp2l.c
Normal file
430
ld128/s_exp2l.c
Normal file
|
@ -0,0 +1,430 @@
|
|||
/*-
|
||||
* Copyright (c) 2005-2008 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 <sys/cdefs.h>
|
||||
|
||||
|
||||
#include <float.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
#include "openlibm.h"
|
||||
|
||||
#define TBLBITS 7
|
||||
#define TBLSIZE (1 << TBLBITS)
|
||||
|
||||
#define BIAS (LDBL_MAX_EXP - 1)
|
||||
#define EXPMASK (BIAS + LDBL_MAX_EXP)
|
||||
|
||||
#if 0 /* XXX Prevent gcc from erroneously constant folding this. */
|
||||
static const long double twom10000 = 0x1p-10000L;
|
||||
#else
|
||||
static volatile long double twom10000 = 0x1p-10000L;
|
||||
#endif
|
||||
|
||||
static const long double
|
||||
huge = 0x1p10000L,
|
||||
P1 = 0x1.62e42fefa39ef35793c7673007e6p-1L,
|
||||
P2 = 0x1.ebfbdff82c58ea86f16b06ec9736p-3L,
|
||||
P3 = 0x1.c6b08d704a0bf8b33a762bad3459p-5L,
|
||||
P4 = 0x1.3b2ab6fba4e7729ccbbe0b4f3fc2p-7L,
|
||||
P5 = 0x1.5d87fe78a67311071dee13fd11d9p-10L,
|
||||
P6 = 0x1.430912f86c7876f4b663b23c5fe5p-13L;
|
||||
|
||||
static const double
|
||||
P7 = 0x1.ffcbfc588b041p-17,
|
||||
P8 = 0x1.62c0223a5c7c7p-20,
|
||||
P9 = 0x1.b52541ff59713p-24,
|
||||
P10 = 0x1.e4cf56a391e22p-28,
|
||||
redux = 0x1.8p112 / TBLSIZE;
|
||||
|
||||
static const long double tbl[TBLSIZE] = {
|
||||
0x1.6a09e667f3bcc908b2fb1366dfeap-1L,
|
||||
0x1.6c012750bdabeed76a99800f4edep-1L,
|
||||
0x1.6dfb23c651a2ef220e2cbe1bc0d4p-1L,
|
||||
0x1.6ff7df9519483cf87e1b4f3e1e98p-1L,
|
||||
0x1.71f75e8ec5f73dd2370f2ef0b148p-1L,
|
||||
0x1.73f9a48a58173bd5c9a4e68ab074p-1L,
|
||||
0x1.75feb564267c8bf6e9aa33a489a8p-1L,
|
||||
0x1.780694fde5d3f619ae02808592a4p-1L,
|
||||
0x1.7a11473eb0186d7d51023f6ccb1ap-1L,
|
||||
0x1.7c1ed0130c1327c49334459378dep-1L,
|
||||
0x1.7e2f336cf4e62105d02ba1579756p-1L,
|
||||
0x1.80427543e1a11b60de67649a3842p-1L,
|
||||
0x1.82589994cce128acf88afab34928p-1L,
|
||||
0x1.8471a4623c7acce52f6b97c6444cp-1L,
|
||||
0x1.868d99b4492ec80e41d90ac2556ap-1L,
|
||||
0x1.88ac7d98a669966530bcdf2d4cc0p-1L,
|
||||
0x1.8ace5422aa0db5ba7c55a192c648p-1L,
|
||||
0x1.8cf3216b5448bef2aa1cd161c57ap-1L,
|
||||
0x1.8f1ae991577362b982745c72eddap-1L,
|
||||
0x1.9145b0b91ffc588a61b469f6b6a0p-1L,
|
||||
0x1.93737b0cdc5e4f4501c3f2540ae8p-1L,
|
||||
0x1.95a44cbc8520ee9b483695a0e7fep-1L,
|
||||
0x1.97d829fde4e4f8b9e920f91e8eb6p-1L,
|
||||
0x1.9a0f170ca07b9ba3109b8c467844p-1L,
|
||||
0x1.9c49182a3f0901c7c46b071f28dep-1L,
|
||||
0x1.9e86319e323231824ca78e64c462p-1L,
|
||||
0x1.a0c667b5de564b29ada8b8cabbacp-1L,
|
||||
0x1.a309bec4a2d3358c171f770db1f4p-1L,
|
||||
0x1.a5503b23e255c8b424491caf88ccp-1L,
|
||||
0x1.a799e1330b3586f2dfb2b158f31ep-1L,
|
||||
0x1.a9e6b5579fdbf43eb243bdff53a2p-1L,
|
||||
0x1.ac36bbfd3f379c0db966a3126988p-1L,
|
||||
0x1.ae89f995ad3ad5e8734d17731c80p-1L,
|
||||
0x1.b0e07298db66590842acdfc6fb4ep-1L,
|
||||
0x1.b33a2b84f15faf6bfd0e7bd941b0p-1L,
|
||||
0x1.b59728de559398e3881111648738p-1L,
|
||||
0x1.b7f76f2fb5e46eaa7b081ab53ff6p-1L,
|
||||
0x1.ba5b030a10649840cb3c6af5b74cp-1L,
|
||||
0x1.bcc1e904bc1d2247ba0f45b3d06cp-1L,
|
||||
0x1.bf2c25bd71e088408d7025190cd0p-1L,
|
||||
0x1.c199bdd85529c2220cb12a0916bap-1L,
|
||||
0x1.c40ab5fffd07a6d14df820f17deap-1L,
|
||||
0x1.c67f12e57d14b4a2137fd20f2a26p-1L,
|
||||
0x1.c8f6d9406e7b511acbc48805c3f6p-1L,
|
||||
0x1.cb720dcef90691503cbd1e949d0ap-1L,
|
||||
0x1.cdf0b555dc3f9c44f8958fac4f12p-1L,
|
||||
0x1.d072d4a07897b8d0f22f21a13792p-1L,
|
||||
0x1.d2f87080d89f18ade123989ea50ep-1L,
|
||||
0x1.d5818dcfba48725da05aeb66dff8p-1L,
|
||||
0x1.d80e316c98397bb84f9d048807a0p-1L,
|
||||
0x1.da9e603db3285708c01a5b6d480cp-1L,
|
||||
0x1.dd321f301b4604b695de3c0630c0p-1L,
|
||||
0x1.dfc97337b9b5eb968cac39ed284cp-1L,
|
||||
0x1.e264614f5a128a12761fa17adc74p-1L,
|
||||
0x1.e502ee78b3ff6273d130153992d0p-1L,
|
||||
0x1.e7a51fbc74c834b548b2832378a4p-1L,
|
||||
0x1.ea4afa2a490d9858f73a18f5dab4p-1L,
|
||||
0x1.ecf482d8e67f08db0312fb949d50p-1L,
|
||||
0x1.efa1bee615a27771fd21a92dabb6p-1L,
|
||||
0x1.f252b376bba974e8696fc3638f24p-1L,
|
||||
0x1.f50765b6e4540674f84b762861a6p-1L,
|
||||
0x1.f7bfdad9cbe138913b4bfe72bd78p-1L,
|
||||
0x1.fa7c1819e90d82e90a7e74b26360p-1L,
|
||||
0x1.fd3c22b8f71f10975ba4b32bd006p-1L,
|
||||
0x1.0000000000000000000000000000p+0L,
|
||||
0x1.0163da9fb33356d84a66ae336e98p+0L,
|
||||
0x1.02c9a3e778060ee6f7caca4f7a18p+0L,
|
||||
0x1.04315e86e7f84bd738f9a20da442p+0L,
|
||||
0x1.059b0d31585743ae7c548eb68c6ap+0L,
|
||||
0x1.0706b29ddf6ddc6dc403a9d87b1ep+0L,
|
||||
0x1.0874518759bc808c35f25d942856p+0L,
|
||||
0x1.09e3ecac6f3834521e060c584d5cp+0L,
|
||||
0x1.0b5586cf9890f6298b92b7184200p+0L,
|
||||
0x1.0cc922b7247f7407b705b893dbdep+0L,
|
||||
0x1.0e3ec32d3d1a2020742e4f8af794p+0L,
|
||||
0x1.0fb66affed31af232091dd8a169ep+0L,
|
||||
0x1.11301d0125b50a4ebbf1aed9321cp+0L,
|
||||
0x1.12abdc06c31cbfb92bad324d6f84p+0L,
|
||||
0x1.1429aaea92ddfb34101943b2588ep+0L,
|
||||
0x1.15a98c8a58e512480d573dd562aep+0L,
|
||||
0x1.172b83c7d517adcdf7c8c50eb162p+0L,
|
||||
0x1.18af9388c8de9bbbf70b9a3c269cp+0L,
|
||||
0x1.1a35beb6fcb753cb698f692d2038p+0L,
|
||||
0x1.1bbe084045cd39ab1e72b442810ep+0L,
|
||||
0x1.1d4873168b9aa7805b8028990be8p+0L,
|
||||
0x1.1ed5022fcd91cb8819ff61121fbep+0L,
|
||||
0x1.2063b88628cd63b8eeb0295093f6p+0L,
|
||||
0x1.21f49917ddc962552fd29294bc20p+0L,
|
||||
0x1.2387a6e75623866c1fadb1c159c0p+0L,
|
||||
0x1.251ce4fb2a63f3582ab7de9e9562p+0L,
|
||||
0x1.26b4565e27cdd257a673281d3068p+0L,
|
||||
0x1.284dfe1f5638096cf15cf03c9fa0p+0L,
|
||||
0x1.29e9df51fdee12c25d15f5a25022p+0L,
|
||||
0x1.2b87fd0dad98ffddea46538fca24p+0L,
|
||||
0x1.2d285a6e4030b40091d536d0733ep+0L,
|
||||
0x1.2ecafa93e2f5611ca0f45d5239a4p+0L,
|
||||
0x1.306fe0a31b7152de8d5a463063bep+0L,
|
||||
0x1.32170fc4cd8313539cf1c3009330p+0L,
|
||||
0x1.33c08b26416ff4c9c8610d96680ep+0L,
|
||||
0x1.356c55f929ff0c94623476373be4p+0L,
|
||||
0x1.371a7373aa9caa7145502f45452ap+0L,
|
||||
0x1.38cae6d05d86585a9cb0d9bed530p+0L,
|
||||
0x1.3a7db34e59ff6ea1bc9299e0a1fep+0L,
|
||||
0x1.3c32dc313a8e484001f228b58cf0p+0L,
|
||||
0x1.3dea64c12342235b41223e13d7eep+0L,
|
||||
0x1.3fa4504ac801ba0bf701aa417b9cp+0L,
|
||||
0x1.4160a21f72e29f84325b8f3dbacap+0L,
|
||||
0x1.431f5d950a896dc704439410b628p+0L,
|
||||
0x1.44e086061892d03136f409df0724p+0L,
|
||||
0x1.46a41ed1d005772512f459229f0ap+0L,
|
||||
0x1.486a2b5c13cd013c1a3b69062f26p+0L,
|
||||
0x1.4a32af0d7d3de672d8bcf46f99b4p+0L,
|
||||
0x1.4bfdad5362a271d4397afec42e36p+0L,
|
||||
0x1.4dcb299fddd0d63b36ef1a9e19dep+0L,
|
||||
0x1.4f9b2769d2ca6ad33d8b69aa0b8cp+0L,
|
||||
0x1.516daa2cf6641c112f52c84d6066p+0L,
|
||||
0x1.5342b569d4f81df0a83c49d86bf4p+0L,
|
||||
0x1.551a4ca5d920ec52ec620243540cp+0L,
|
||||
0x1.56f4736b527da66ecb004764e61ep+0L,
|
||||
0x1.58d12d497c7fd252bc2b7343d554p+0L,
|
||||
0x1.5ab07dd48542958c93015191e9a8p+0L,
|
||||
0x1.5c9268a5946b701c4b1b81697ed4p+0L,
|
||||
0x1.5e76f15ad21486e9be4c20399d12p+0L,
|
||||
0x1.605e1b976dc08b076f592a487066p+0L,
|
||||
0x1.6247eb03a5584b1f0fa06fd2d9eap+0L,
|
||||
0x1.6434634ccc31fc76f8714c4ee122p+0L,
|
||||
0x1.66238825522249127d9e29b92ea2p+0L,
|
||||
0x1.68155d44ca973081c57227b9f69ep+0L,
|
||||
};
|
||||
|
||||
static const float eps[TBLSIZE] = {
|
||||
-0x1.5c50p-101,
|
||||
-0x1.5d00p-106,
|
||||
0x1.8e90p-102,
|
||||
-0x1.5340p-103,
|
||||
0x1.1bd0p-102,
|
||||
-0x1.4600p-105,
|
||||
-0x1.7a40p-104,
|
||||
0x1.d590p-102,
|
||||
-0x1.d590p-101,
|
||||
0x1.b100p-103,
|
||||
-0x1.0d80p-105,
|
||||
0x1.6b00p-103,
|
||||
-0x1.9f00p-105,
|
||||
0x1.c400p-103,
|
||||
0x1.e120p-103,
|
||||
-0x1.c100p-104,
|
||||
-0x1.9d20p-103,
|
||||
0x1.a800p-108,
|
||||
0x1.4c00p-106,
|
||||
-0x1.9500p-106,
|
||||
0x1.6900p-105,
|
||||
-0x1.29d0p-100,
|
||||
0x1.4c60p-103,
|
||||
0x1.13a0p-102,
|
||||
-0x1.5b60p-103,
|
||||
-0x1.1c40p-103,
|
||||
0x1.db80p-102,
|
||||
0x1.91a0p-102,
|
||||
0x1.dc00p-105,
|
||||
0x1.44c0p-104,
|
||||
0x1.9710p-102,
|
||||
0x1.8760p-103,
|
||||
-0x1.a720p-103,
|
||||
0x1.ed20p-103,
|
||||
-0x1.49c0p-102,
|
||||
-0x1.e000p-111,
|
||||
0x1.86a0p-103,
|
||||
0x1.2b40p-103,
|
||||
-0x1.b400p-108,
|
||||
0x1.1280p-99,
|
||||
-0x1.02d8p-102,
|
||||
-0x1.e3d0p-103,
|
||||
-0x1.b080p-105,
|
||||
-0x1.f100p-107,
|
||||
-0x1.16c0p-105,
|
||||
-0x1.1190p-103,
|
||||
-0x1.a7d2p-100,
|
||||
0x1.3450p-103,
|
||||
-0x1.67c0p-105,
|
||||
0x1.4b80p-104,
|
||||
-0x1.c4e0p-103,
|
||||
0x1.6000p-108,
|
||||
-0x1.3f60p-105,
|
||||
0x1.93f0p-104,
|
||||
0x1.5fe0p-105,
|
||||
0x1.6f80p-107,
|
||||
-0x1.7600p-106,
|
||||
0x1.21e0p-106,
|
||||
-0x1.3a40p-106,
|
||||
-0x1.40c0p-104,
|
||||
-0x1.9860p-105,
|
||||
-0x1.5d40p-108,
|
||||
-0x1.1d70p-106,
|
||||
0x1.2760p-105,
|
||||
0x0.0000p+0,
|
||||
0x1.21e2p-104,
|
||||
-0x1.9520p-108,
|
||||
-0x1.5720p-106,
|
||||
-0x1.4810p-106,
|
||||
-0x1.be00p-109,
|
||||
0x1.0080p-105,
|
||||
-0x1.5780p-108,
|
||||
-0x1.d460p-105,
|
||||
-0x1.6140p-105,
|
||||
0x1.4630p-104,
|
||||
0x1.ad50p-103,
|
||||
0x1.82e0p-105,
|
||||
0x1.1d3cp-101,
|
||||
0x1.6100p-107,
|
||||
0x1.ec30p-104,
|
||||
0x1.f200p-108,
|
||||
0x1.0b40p-103,
|
||||
0x1.3660p-102,
|
||||
0x1.d9d0p-103,
|
||||
-0x1.02d0p-102,
|
||||
0x1.b070p-103,
|
||||
0x1.b9c0p-104,
|
||||
-0x1.01c0p-103,
|
||||
-0x1.dfe0p-103,
|
||||
0x1.1b60p-104,
|
||||
-0x1.ae94p-101,
|
||||
-0x1.3340p-104,
|
||||
0x1.b3d8p-102,
|
||||
-0x1.6e40p-105,
|
||||
-0x1.3670p-103,
|
||||
0x1.c140p-104,
|
||||
0x1.1840p-101,
|
||||
0x1.1ab0p-102,
|
||||
-0x1.a400p-104,
|
||||
0x1.1f00p-104,
|
||||
-0x1.7180p-103,
|
||||
0x1.4ce0p-102,
|
||||
0x1.9200p-107,
|
||||
-0x1.54c0p-103,
|
||||
0x1.1b80p-105,
|
||||
-0x1.1828p-101,
|
||||
0x1.5720p-102,
|
||||
-0x1.a060p-100,
|
||||
0x1.9160p-102,
|
||||
0x1.a280p-104,
|
||||
0x1.3400p-107,
|
||||
0x1.2b20p-102,
|
||||
0x1.7800p-108,
|
||||
0x1.cfd0p-101,
|
||||
0x1.2ef0p-102,
|
||||
-0x1.2760p-99,
|
||||
0x1.b380p-104,
|
||||
0x1.0048p-101,
|
||||
-0x1.60b0p-102,
|
||||
0x1.a1ccp-100,
|
||||
-0x1.a640p-104,
|
||||
-0x1.08a0p-101,
|
||||
0x1.7e60p-102,
|
||||
0x1.22c0p-103,
|
||||
-0x1.7200p-106,
|
||||
0x1.f0f0p-102,
|
||||
0x1.eb4ep-99,
|
||||
0x1.c6e0p-103,
|
||||
};
|
||||
|
||||
/*
|
||||
* exp2l(x): compute the base 2 exponential of x
|
||||
*
|
||||
* Accuracy: Peak error < 0.502 ulp.
|
||||
*
|
||||
* Method: (accurate tables)
|
||||
*
|
||||
* Reduce x:
|
||||
* x = 2**k + y, for integer k and |y| <= 1/2.
|
||||
* Thus we have exp2(x) = 2**k * exp2(y).
|
||||
*
|
||||
* Reduce y:
|
||||
* y = i/TBLSIZE + z - eps[i] for integer i near y * TBLSIZE.
|
||||
* Thus we have exp2(y) = exp2(i/TBLSIZE) * exp2(z - eps[i]),
|
||||
* with |z - eps[i]| <= 2**-8 + 2**-98 for the table used.
|
||||
*
|
||||
* We compute exp2(i/TBLSIZE) via table lookup and exp2(z - eps[i]) via
|
||||
* a degree-10 minimax polynomial with maximum error under 2**-120.
|
||||
* The values in exp2t[] and eps[] are chosen such that
|
||||
* exp2t[i] = exp2(i/TBLSIZE + eps[i]), and eps[i] is a small offset such
|
||||
* that exp2t[i] is accurate to 2**-122.
|
||||
*
|
||||
* Note that the range of i is +-TBLSIZE/2, so we actually index the tables
|
||||
* by i0 = i + TBLSIZE/2.
|
||||
*
|
||||
* This method is due to Gal, with many details due to Gal and Bachelis:
|
||||
*
|
||||
* Gal, S. and Bachelis, B. An Accurate Elementary Mathematical Library
|
||||
* for the IEEE Floating Point Standard. TOMS 17(1), 26-46 (1991).
|
||||
*/
|
||||
long double
|
||||
exp2l(long double x)
|
||||
{
|
||||
union IEEEl2bits u, v;
|
||||
long double r, t, twopk, twopkp10000, z;
|
||||
uint32_t hx, ix, i0;
|
||||
int k;
|
||||
|
||||
u.e = x;
|
||||
|
||||
/* Filter out exceptional cases. */
|
||||
hx = u.xbits.expsign;
|
||||
ix = hx & EXPMASK;
|
||||
if (ix >= BIAS + 14) { /* |x| >= 16384 */
|
||||
if (ix == BIAS + LDBL_MAX_EXP) {
|
||||
if (u.xbits.manh != 0
|
||||
|| u.xbits.manl != 0
|
||||
|| (hx & 0x8000) == 0)
|
||||
return (x + x); /* x is NaN or +Inf */
|
||||
else
|
||||
return (0.0); /* x is -Inf */
|
||||
}
|
||||
if (x >= 16384)
|
||||
return (huge * huge); /* overflow */
|
||||
if (x <= -16495)
|
||||
return (twom10000 * twom10000); /* underflow */
|
||||
} else if (ix <= BIAS - 115) { /* |x| < 0x1p-115 */
|
||||
return (1.0 + x);
|
||||
}
|
||||
|
||||
/*
|
||||
* Reduce x, computing z, i0, and k. The low bits of x + redux
|
||||
* contain the 16-bit integer part of the exponent (k) followed by
|
||||
* TBLBITS fractional bits (i0). We use bit tricks to extract these
|
||||
* as integers, then set z to the remainder.
|
||||
*
|
||||
* Example: Suppose x is 0xabc.123456p0 and TBLBITS is 8.
|
||||
* Then the low-order word of x + redux is 0x000abc12,
|
||||
* We split this into k = 0xabc and i0 = 0x12 (adjusted to
|
||||
* index into the table), then we compute z = 0x0.003456p0.
|
||||
*
|
||||
* XXX If the exponent is negative, the computation of k depends on
|
||||
* '>>' doing sign extension.
|
||||
*/
|
||||
u.e = x + redux;
|
||||
i0 = (u.bits.manl & 0xffffffff) + TBLSIZE / 2;
|
||||
k = (int)i0 >> TBLBITS;
|
||||
i0 = i0 & (TBLSIZE - 1);
|
||||
u.e -= redux;
|
||||
z = x - u.e;
|
||||
v.xbits.manh = 0;
|
||||
v.xbits.manl = 0;
|
||||
if (k >= LDBL_MIN_EXP) {
|
||||
v.xbits.expsign = LDBL_MAX_EXP - 1 + k;
|
||||
twopk = v.e;
|
||||
} else {
|
||||
v.xbits.expsign = LDBL_MAX_EXP - 1 + k + 10000;
|
||||
twopkp10000 = v.e;
|
||||
}
|
||||
|
||||
/* Compute r = exp2(y) = exp2t[i0] * p(z - eps[i]). */
|
||||
t = tbl[i0]; /* exp2t[i0] */
|
||||
z -= eps[i0]; /* eps[i0] */
|
||||
r = t + t * z * (P1 + z * (P2 + z * (P3 + z * (P4 + z * (P5 + z * (P6
|
||||
+ z * (P7 + z * (P8 + z * (P9 + z * P10)))))))));
|
||||
|
||||
/* Scale by 2**k. */
|
||||
if(k >= LDBL_MIN_EXP) {
|
||||
if (k == LDBL_MAX_EXP)
|
||||
return (r * 2.0 * 0x1p16383L);
|
||||
return (r * twopk);
|
||||
} else {
|
||||
return (r * twopkp10000 * twom10000);
|
||||
}
|
||||
}
|
46
ld128/s_nanl.c
Normal file
46
ld128/s_nanl.c
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*-
|
||||
* Copyright (c) 2007 David Schultz
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY 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 AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/msun/ld128/s_nanl.c,v 1.3 2008/03/02 20:16:55 das Exp $
|
||||
*/
|
||||
|
||||
#include "openlibm.h"
|
||||
|
||||
#include "fpmath.h"
|
||||
#include "../src/math_private.h"
|
||||
|
||||
long double
|
||||
nanl(const char *s)
|
||||
{
|
||||
union {
|
||||
union IEEEl2bits ieee;
|
||||
uint32_t bits[4];
|
||||
} u;
|
||||
|
||||
_scan_nan(u.bits, 4, s);
|
||||
u.ieee.bits.exp = 0x7fff;
|
||||
u.ieee.bits.manh |= 1ULL << 47; /* make it a quiet NaN */
|
||||
return (u.ieee.e);
|
||||
}
|
192
src/FILES
Normal file
192
src/FILES
Normal file
|
@ -0,0 +1,192 @@
|
|||
e_acos.c
|
||||
e_acosf.c
|
||||
e_acosh.c
|
||||
e_acoshf.c
|
||||
e_acosl.c
|
||||
e_asin.c
|
||||
e_asinf.c
|
||||
e_asinl.c
|
||||
e_atan2.c
|
||||
e_atan2f.c
|
||||
e_atan2l.c
|
||||
e_atanh.c
|
||||
e_atanhf.c
|
||||
e_cosh.c
|
||||
e_coshf.c
|
||||
e_exp.c
|
||||
e_expf.c
|
||||
e_fmod.c
|
||||
e_fmodf.c
|
||||
e_fmodl.c
|
||||
e_gamma.c
|
||||
e_gamma_r.c
|
||||
e_gammaf.c
|
||||
e_gammaf_r.c
|
||||
e_hypot.c
|
||||
e_hypotf.c
|
||||
e_hypotl.c
|
||||
e_j0.c
|
||||
e_j0f.c
|
||||
e_j1.c
|
||||
e_j1f.c
|
||||
e_jn.c
|
||||
e_jnf.c
|
||||
e_lgamma.c
|
||||
e_lgamma_r.c
|
||||
e_lgammaf.c
|
||||
e_lgammaf_r.c
|
||||
e_log.c
|
||||
e_log10.c
|
||||
e_log10f.c
|
||||
e_logf.c
|
||||
e_pow.c
|
||||
e_powf.c
|
||||
e_rem_pio2.c
|
||||
e_rem_pio2f.c
|
||||
e_remainder.c
|
||||
e_remainderf.c
|
||||
e_remainderl.c
|
||||
e_scalb.c
|
||||
e_scalbf.c
|
||||
e_sinh.c
|
||||
e_sinhf.c
|
||||
e_sqrt.c
|
||||
e_sqrtf.c
|
||||
e_sqrtl.c
|
||||
k_cos.c
|
||||
k_cosf.c
|
||||
k_rem_pio2.c
|
||||
k_sin.c
|
||||
k_sinf.c
|
||||
k_tan.c
|
||||
k_tanf.c
|
||||
math.h
|
||||
math_private.h
|
||||
s_asinh.c
|
||||
s_asinhf.c
|
||||
s_atan.c
|
||||
s_atanf.c
|
||||
s_atanl.c
|
||||
s_carg.c
|
||||
s_cargf.c
|
||||
s_cargl.c
|
||||
s_cbrt.c
|
||||
s_cbrtf.c
|
||||
s_ceil.c
|
||||
s_ceilf.c
|
||||
s_ceill.c
|
||||
s_cimag.c
|
||||
s_cimagf.c
|
||||
s_cimagl.c
|
||||
s_conj.c
|
||||
s_conjf.c
|
||||
s_conjl.c
|
||||
s_copysign.c
|
||||
s_copysignf.c
|
||||
s_copysignl.c
|
||||
s_cos.c
|
||||
s_cosf.c
|
||||
s_cosl.c
|
||||
s_cproj.c
|
||||
s_cprojf.c
|
||||
s_cprojl.c
|
||||
s_creal.c
|
||||
s_crealf.c
|
||||
s_creall.c
|
||||
s_csqrt.c
|
||||
s_csqrtf.c
|
||||
s_csqrtl.c
|
||||
s_erf.c
|
||||
s_erff.c
|
||||
s_exp2.c
|
||||
s_exp2f.c
|
||||
s_expm1.c
|
||||
s_expm1f.c
|
||||
s_fabs.c
|
||||
s_fabsf.c
|
||||
s_fabsl.c
|
||||
s_fdim.c
|
||||
s_finite.c
|
||||
s_finitef.c
|
||||
s_floor.c
|
||||
s_floorf.c
|
||||
s_floorl.c
|
||||
s_fma.c
|
||||
s_fmaf.c
|
||||
s_fmal.c
|
||||
s_fmax.c
|
||||
s_fmaxf.c
|
||||
s_fmaxl.c
|
||||
s_fmin.c
|
||||
s_fminf.c
|
||||
s_fminl.c
|
||||
s_frexp.c
|
||||
s_frexpf.c
|
||||
s_frexpl.c
|
||||
s_ilogb.c
|
||||
s_ilogbf.c
|
||||
s_ilogbl.c
|
||||
s_isfinite.c
|
||||
s_isnan.c
|
||||
s_isnormal.c
|
||||
s_llrint.c
|
||||
s_llrintf.c
|
||||
s_llrintl.c
|
||||
s_llround.c
|
||||
s_llroundf.c
|
||||
s_llroundl.c
|
||||
s_log1p.c
|
||||
s_log1pf.c
|
||||
s_logb.c
|
||||
s_logbf.c
|
||||
s_logbl.c
|
||||
s_lrint.c
|
||||
s_lrintf.c
|
||||
s_lrintl.c
|
||||
s_lround.c
|
||||
s_lroundf.c
|
||||
s_lroundl.c
|
||||
s_modf.c
|
||||
s_modff.c
|
||||
s_modfl.c
|
||||
s_nan.c
|
||||
s_nearbyint.c
|
||||
s_nextafter.c
|
||||
s_nextafterf.c
|
||||
s_nextafterl.c
|
||||
s_nexttoward.c
|
||||
s_nexttowardf.c
|
||||
s_remquo.c
|
||||
s_remquof.c
|
||||
s_remquol.c
|
||||
s_rint.c
|
||||
s_rintf.c
|
||||
s_rintl.c
|
||||
s_round.c
|
||||
s_roundf.c
|
||||
s_roundl.c
|
||||
s_scalbln.c
|
||||
s_scalbn.c
|
||||
s_scalbnf.c
|
||||
s_scalbnl.c
|
||||
s_signbit.c
|
||||
s_signgam.c
|
||||
s_significand.c
|
||||
s_significandf.c
|
||||
s_sin.c
|
||||
s_sinf.c
|
||||
s_sinl.c
|
||||
s_tan.c
|
||||
s_tanf.c
|
||||
s_tanh.c
|
||||
s_tanhf.c
|
||||
s_tanl.c
|
||||
s_tgammaf.c
|
||||
s_trunc.c
|
||||
s_truncf.c
|
||||
s_truncl.c
|
||||
w_cabs.c
|
||||
w_cabsf.c
|
||||
w_cabsl.c
|
||||
w_drem.c
|
||||
w_dremf.c
|
111
src/e_acos.c
Normal file
111
src/e_acos.c
Normal file
|
@ -0,0 +1,111 @@
|
|||
|
||||
/* @(#)e_acos.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
|
||||
/* __ieee754_acos(x)
|
||||
* Method :
|
||||
* acos(x) = pi/2 - asin(x)
|
||||
* acos(-x) = pi/2 + asin(x)
|
||||
* For |x|<=0.5
|
||||
* acos(x) = pi/2 - (x + x*x^2*R(x^2)) (see asin.c)
|
||||
* For x>0.5
|
||||
* acos(x) = pi/2 - (pi/2 - 2asin(sqrt((1-x)/2)))
|
||||
* = 2asin(sqrt((1-x)/2))
|
||||
* = 2s + 2s*z*R(z) ...z=(1-x)/2, s=sqrt(z)
|
||||
* = 2f + (2c + 2s*z*R(z))
|
||||
* where f=hi part of s, and c = (z-f*f)/(s+f) is the correction term
|
||||
* for f so that f+c ~ sqrt(z).
|
||||
* For x<-0.5
|
||||
* acos(x) = pi - 2asin(sqrt((1-|x|)/2))
|
||||
* = pi - 0.5*(s+s*z*R(z)), where z=(1-|x|)/2,s=sqrt(z)
|
||||
*
|
||||
* Special cases:
|
||||
* if x is NaN, return x itself;
|
||||
* if |x|>1, return NaN with invalid signal.
|
||||
*
|
||||
* Function needed: sqrt
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "openlibm.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const double
|
||||
one= 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
|
||||
pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */
|
||||
pio2_hi = 1.57079632679489655800e+00; /* 0x3FF921FB, 0x54442D18 */
|
||||
static volatile double
|
||||
pio2_lo = 6.12323399573676603587e-17; /* 0x3C91A626, 0x33145C07 */
|
||||
static const double
|
||||
pS0 = 1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */
|
||||
pS1 = -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */
|
||||
pS2 = 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */
|
||||
pS3 = -4.00555345006794114027e-02, /* 0xBFA48228, 0xB5688F3B */
|
||||
pS4 = 7.91534994289814532176e-04, /* 0x3F49EFE0, 0x7501B288 */
|
||||
pS5 = 3.47933107596021167570e-05, /* 0x3F023DE1, 0x0DFDF709 */
|
||||
qS1 = -2.40339491173441421878e+00, /* 0xC0033A27, 0x1C8A2D4B */
|
||||
qS2 = 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */
|
||||
qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
|
||||
qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
|
||||
|
||||
double
|
||||
__ieee754_acos(double x)
|
||||
{
|
||||
double z,p,q,r,w,s,c,df;
|
||||
int32_t hx,ix;
|
||||
GET_HIGH_WORD(hx,x);
|
||||
ix = hx&0x7fffffff;
|
||||
if(ix>=0x3ff00000) { /* |x| >= 1 */
|
||||
u_int32_t lx;
|
||||
GET_LOW_WORD(lx,x);
|
||||
if(((ix-0x3ff00000)|lx)==0) { /* |x|==1 */
|
||||
if(hx>0) return 0.0; /* acos(1) = 0 */
|
||||
else return pi+2.0*pio2_lo; /* acos(-1)= pi */
|
||||
}
|
||||
return (x-x)/(x-x); /* acos(|x|>1) is NaN */
|
||||
}
|
||||
if(ix<0x3fe00000) { /* |x| < 0.5 */
|
||||
if(ix<=0x3c600000) return pio2_hi+pio2_lo;/*if|x|<2**-57*/
|
||||
z = x*x;
|
||||
p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
|
||||
q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
|
||||
r = p/q;
|
||||
return pio2_hi - (x - (pio2_lo-x*r));
|
||||
} else if (hx<0) { /* x < -0.5 */
|
||||
z = (one+x)*0.5;
|
||||
p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
|
||||
q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
|
||||
s = sqrt(z);
|
||||
r = p/q;
|
||||
w = r*s-pio2_lo;
|
||||
return pi - 2.0*(s+w);
|
||||
} else { /* x > 0.5 */
|
||||
z = (one-x)*0.5;
|
||||
s = sqrt(z);
|
||||
df = s;
|
||||
SET_LOW_WORD(df,0);
|
||||
c = (z-df*df)/(s+df);
|
||||
p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
|
||||
q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
|
||||
r = p/q;
|
||||
w = r*s+c;
|
||||
return 2.0*(df+w);
|
||||
}
|
||||
}
|
||||
|
||||
#if LDBL_MANT_DIG == 53
|
||||
__weak_reference(acos, acosl);
|
||||
#endif
|
77
src/e_acosf.c
Normal file
77
src/e_acosf.c
Normal file
|
@ -0,0 +1,77 @@
|
|||
/* e_acosf.c -- float version of e_acos.c.
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* 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.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
|
||||
#include "openlibm.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const float
|
||||
one = 1.0000000000e+00, /* 0x3F800000 */
|
||||
pi = 3.1415925026e+00, /* 0x40490fda */
|
||||
pio2_hi = 1.5707962513e+00; /* 0x3fc90fda */
|
||||
static volatile float
|
||||
pio2_lo = 7.5497894159e-08; /* 0x33a22168 */
|
||||
static const float
|
||||
pS0 = 1.6666586697e-01,
|
||||
pS1 = -4.2743422091e-02,
|
||||
pS2 = -8.6563630030e-03,
|
||||
qS1 = -7.0662963390e-01;
|
||||
|
||||
float
|
||||
__ieee754_acosf(float x)
|
||||
{
|
||||
float z,p,q,r,w,s,c,df;
|
||||
int32_t hx,ix;
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
ix = hx&0x7fffffff;
|
||||
if(ix>=0x3f800000) { /* |x| >= 1 */
|
||||
if(ix==0x3f800000) { /* |x| == 1 */
|
||||
if(hx>0) return 0.0; /* acos(1) = 0 */
|
||||
else return pi+(float)2.0*pio2_lo; /* acos(-1)= pi */
|
||||
}
|
||||
return (x-x)/(x-x); /* acos(|x|>1) is NaN */
|
||||
}
|
||||
if(ix<0x3f000000) { /* |x| < 0.5 */
|
||||
if(ix<=0x32800000) return pio2_hi+pio2_lo;/*if|x|<2**-26*/
|
||||
z = x*x;
|
||||
p = z*(pS0+z*(pS1+z*pS2));
|
||||
q = one+z*qS1;
|
||||
r = p/q;
|
||||
return pio2_hi - (x - (pio2_lo-x*r));
|
||||
} else if (hx<0) { /* x < -0.5 */
|
||||
z = (one+x)*(float)0.5;
|
||||
p = z*(pS0+z*(pS1+z*pS2));
|
||||
q = one+z*qS1;
|
||||
s = sqrtf(z);
|
||||
r = p/q;
|
||||
w = r*s-pio2_lo;
|
||||
return pi - (float)2.0*(s+w);
|
||||
} else { /* x > 0.5 */
|
||||
int32_t idf;
|
||||
z = (one-x)*(float)0.5;
|
||||
s = sqrtf(z);
|
||||
df = s;
|
||||
GET_FLOAT_WORD(idf,df);
|
||||
SET_FLOAT_WORD(df,idf&0xfffff000);
|
||||
c = (z-df*df)/(s+df);
|
||||
p = z*(pS0+z*(pS1+z*pS2));
|
||||
q = one+z*qS1;
|
||||
r = p/q;
|
||||
w = r*s+c;
|
||||
return (float)2.0*(df+w);
|
||||
}
|
||||
}
|
62
src/e_acosh.c
Normal file
62
src/e_acosh.c
Normal file
|
@ -0,0 +1,62 @@
|
|||
|
||||
/* @(#)e_acosh.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
|
||||
/* __ieee754_acosh(x)
|
||||
* Method :
|
||||
* Based on
|
||||
* acosh(x) = log [ x + sqrt(x*x-1) ]
|
||||
* we have
|
||||
* acosh(x) := log(x)+ln2, if x is large; else
|
||||
* acosh(x) := log(2x-1/(sqrt(x*x-1)+x)) if x>2; else
|
||||
* acosh(x) := log1p(t+sqrt(2.0*t+t*t)); where t=x-1.
|
||||
*
|
||||
* Special cases:
|
||||
* acosh(x) is NaN with signal if x<1.
|
||||
* acosh(NaN) is NaN without signal.
|
||||
*/
|
||||
|
||||
#include "openlibm.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const double
|
||||
one = 1.0,
|
||||
ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */
|
||||
|
||||
double
|
||||
__ieee754_acosh(double x)
|
||||
{
|
||||
double t;
|
||||
int32_t hx;
|
||||
u_int32_t lx;
|
||||
EXTRACT_WORDS(hx,lx,x);
|
||||
if(hx<0x3ff00000) { /* x < 1 */
|
||||
return (x-x)/(x-x);
|
||||
} else if(hx >=0x41b00000) { /* x > 2**28 */
|
||||
if(hx >=0x7ff00000) { /* x is inf of NaN */
|
||||
return x+x;
|
||||
} else
|
||||
return __ieee754_log(x)+ln2; /* acosh(huge)=log(2x) */
|
||||
} else if(((hx-0x3ff00000)|lx)==0) {
|
||||
return 0.0; /* acosh(1) = 0 */
|
||||
} else if (hx > 0x40000000) { /* 2**28 > x > 2 */
|
||||
t=x*x;
|
||||
return __ieee754_log(2.0*x-one/(x+sqrt(t-one)));
|
||||
} else { /* 1<x<2 */
|
||||
t = x-one;
|
||||
return log1p(t+sqrt(2.0*t+t*t));
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue