updated gamma and gammaf
copied y0 y1 yn BeOS behaviour (even if the spec accepts both) added ilogb ilogbf significand significandf (x86 and generic) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17248 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
f90e454336
commit
b7b5cda158
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of gamma function according to ISO C.
|
/* Implementation of gamma function according to ISO C.
|
||||||
Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1997, 1999, 2001, 2004 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -35,9 +35,9 @@ __ieee754_gamma_r (double x, int *signgamp)
|
|||||||
|
|
||||||
if (((hx & 0x7fffffff) | lx) == 0)
|
if (((hx & 0x7fffffff) | lx) == 0)
|
||||||
{
|
{
|
||||||
/* Return value for x == 0 is NaN with invalid exception. */
|
/* Return value for x == 0 is Inf with divide by zero exception. */
|
||||||
*signgamp = 0;
|
*signgamp = 0;
|
||||||
return x / x;
|
return 1.0 / x;
|
||||||
}
|
}
|
||||||
if (hx < 0 && (u_int32_t) hx < 0xfff00000 && __rint (x) == x)
|
if (hx < 0 && (u_int32_t) hx < 0xfff00000 && __rint (x) == x)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of gamma function according to ISO C.
|
/* Implementation of gamma function according to ISO C.
|
||||||
Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1997, 1999, 2001, 2004 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -34,9 +34,9 @@ __ieee754_gammaf_r (float x, int *signgamp)
|
|||||||
|
|
||||||
if ((hx & 0x7fffffff) == 0)
|
if ((hx & 0x7fffffff) == 0)
|
||||||
{
|
{
|
||||||
/* Return value for x == 0 is NaN with invalid exception. */
|
/* Return value for x == 0 is Inf with divide by zero exception. */
|
||||||
*signgamp = 0;
|
*signgamp = 0;
|
||||||
return x / x;
|
return 1.0 / x;
|
||||||
}
|
}
|
||||||
if (hx < 0 && (u_int32_t) hx < 0xff800000 && __rintf (x) == x)
|
if (hx < 0 && (u_int32_t) hx < 0xff800000 && __rintf (x) == x)
|
||||||
{
|
{
|
||||||
|
@ -185,10 +185,14 @@ V[] = {1.27304834834123699328e-02, /* 0x3F8A1270, 0x91C9C71A */
|
|||||||
|
|
||||||
EXTRACT_WORDS(hx,lx,x);
|
EXTRACT_WORDS(hx,lx,x);
|
||||||
ix = 0x7fffffff&hx;
|
ix = 0x7fffffff&hx;
|
||||||
/* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0 */
|
/* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0, y0(0) is -inf. */
|
||||||
if(ix>=0x7ff00000) return one/(x+x*x);
|
if(ix>=0x7ff00000) return one/(x+x*x);
|
||||||
if((ix|lx)==0) return -one/zero;
|
if((ix|lx)==0) return -HUGE_VAL+x; /* -inf and overflow exception. */
|
||||||
if(hx<0) return zero/zero;
|
#ifdef __BEOS__
|
||||||
|
if(hx<0) return -HUGE_VAL+x; // also valid says the spec
|
||||||
|
#else
|
||||||
|
if(hx<0) return zero/(zero*x);
|
||||||
|
#endif
|
||||||
if(ix >= 0x40000000) { /* |x| >= 2.0 */
|
if(ix >= 0x40000000) { /* |x| >= 2.0 */
|
||||||
/* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0))
|
/* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0))
|
||||||
* where x0 = x-pi/4
|
* where x0 = x-pi/4
|
||||||
|
@ -190,8 +190,12 @@ static double V0[5] = {
|
|||||||
ix = 0x7fffffff&hx;
|
ix = 0x7fffffff&hx;
|
||||||
/* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */
|
/* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */
|
||||||
if(ix>=0x7ff00000) return one/(x+x*x);
|
if(ix>=0x7ff00000) return one/(x+x*x);
|
||||||
if((ix|lx)==0) return -one/zero;
|
if((ix|lx)==0) return -HUGE_VAL+x; /* -inf and overflow exception. */;
|
||||||
if(hx<0) return zero/zero;
|
#ifdef __BEOS__
|
||||||
|
if(hx<0) return -HUGE_VAL+x;
|
||||||
|
#else
|
||||||
|
if(hx<0) return zero/(zero*x);
|
||||||
|
#endif
|
||||||
if(ix >= 0x40000000) { /* |x| >= 2.0 */
|
if(ix >= 0x40000000) { /* |x| >= 2.0 */
|
||||||
__sincos (x, &s, &c);
|
__sincos (x, &s, &c);
|
||||||
ss = -s-c;
|
ss = -s-c;
|
||||||
|
@ -20,7 +20,7 @@ static char rcsid[] = "$NetBSD: e_jn.c,v 1.9 1995/05/10 20:45:34 jtc Exp $";
|
|||||||
* of order n
|
* of order n
|
||||||
*
|
*
|
||||||
* Special cases:
|
* Special cases:
|
||||||
* y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal;
|
* y0(0)=y1(0)=yn(n,0) = -inf with overflow signal;
|
||||||
* y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal.
|
* y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal.
|
||||||
* Note 2. About jn(n,x), yn(n,x)
|
* Note 2. About jn(n,x), yn(n,x)
|
||||||
* For n=0, j0(x) is called,
|
* For n=0, j0(x) is called,
|
||||||
@ -236,8 +236,12 @@ static double zero = 0.00000000000000000000e+00;
|
|||||||
ix = 0x7fffffff&hx;
|
ix = 0x7fffffff&hx;
|
||||||
/* if Y(n,NaN) is NaN */
|
/* if Y(n,NaN) is NaN */
|
||||||
if((ix|((u_int32_t)(lx|-lx))>>31)>0x7ff00000) return x+x;
|
if((ix|((u_int32_t)(lx|-lx))>>31)>0x7ff00000) return x+x;
|
||||||
if((ix|lx)==0) return -one/zero;
|
if((ix|lx)==0) return -HUGE_VAL+x; /* -inf and overflow exception. */;
|
||||||
if(hx<0) return zero/zero;
|
#ifdef __BEOS__
|
||||||
|
if(hx<0) return -HUGE_VAL+x;
|
||||||
|
#else
|
||||||
|
if(hx<0) return zero/(zero*x);
|
||||||
|
#endif
|
||||||
sign = 1;
|
sign = 1;
|
||||||
if(n<0){
|
if(n<0){
|
||||||
n = -n;
|
n = -n;
|
||||||
|
64
src/system/libroot/posix/glibc/arch/generic/s_ilogb.c
Normal file
64
src/system/libroot/posix/glibc/arch/generic/s_ilogb.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* @(#)s_ilogb.c 5.1 93/09/24 */
|
||||||
|
/*
|
||||||
|
* ====================================================
|
||||||
|
* 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.
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBM_SCCS) && !defined(lint)
|
||||||
|
static char rcsid[] = "$NetBSD: s_ilogb.c,v 1.9 1995/05/10 20:47:28 jtc Exp $";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ilogb(double x)
|
||||||
|
* return the binary exponent of non-zero x
|
||||||
|
* ilogb(0) = FP_ILOGB0
|
||||||
|
* ilogb(NaN) = FP_ILOGBNAN (no signal is raised)
|
||||||
|
* ilogb(+-Inf) = INT_MAX (no signal is raised)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include "math.h"
|
||||||
|
#include "math_private.h"
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
int __ilogb(double x)
|
||||||
|
#else
|
||||||
|
int __ilogb(x)
|
||||||
|
double x;
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
int32_t hx,lx,ix;
|
||||||
|
|
||||||
|
GET_HIGH_WORD(hx,x);
|
||||||
|
hx &= 0x7fffffff;
|
||||||
|
if(hx<0x00100000) {
|
||||||
|
GET_LOW_WORD(lx,x);
|
||||||
|
if((hx|lx)==0)
|
||||||
|
return FP_ILOGB0; /* ilogb(0) = FP_ILOGB0 */
|
||||||
|
else /* subnormal x */
|
||||||
|
if(hx==0) {
|
||||||
|
for (ix = -1043; lx>0; lx<<=1) ix -=1;
|
||||||
|
} else {
|
||||||
|
for (ix = -1022,hx<<=11; hx>0; hx<<=1) ix -=1;
|
||||||
|
}
|
||||||
|
return ix;
|
||||||
|
}
|
||||||
|
else if (hx<0x7ff00000) return (hx>>20)-1023;
|
||||||
|
else if (FP_ILOGBNAN != INT_MAX) {
|
||||||
|
/* ISO C99 requires ilogb(+-Inf) == INT_MAX. */
|
||||||
|
GET_LOW_WORD(lx,x);
|
||||||
|
if(((hx^0x7ff00000)|lx) == 0)
|
||||||
|
return INT_MAX;
|
||||||
|
}
|
||||||
|
return FP_ILOGBNAN;
|
||||||
|
}
|
||||||
|
weak_alias (__ilogb, ilogb)
|
||||||
|
#ifdef NO_LONG_DOUBLE
|
||||||
|
strong_alias (__ilogb, __ilogbl)
|
||||||
|
weak_alias (__ilogb, ilogbl)
|
||||||
|
#endif
|
50
src/system/libroot/posix/glibc/arch/generic/s_ilogbf.c
Normal file
50
src/system/libroot/posix/glibc/arch/generic/s_ilogbf.c
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/* s_ilogbf.c -- float version of s_ilogb.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.
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBM_SCCS) && !defined(lint)
|
||||||
|
static char rcsid[] = "$NetBSD: s_ilogbf.c,v 1.4 1995/05/10 20:47:31 jtc Exp $";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include "math.h"
|
||||||
|
#include "math_private.h"
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
int __ilogbf(float x)
|
||||||
|
#else
|
||||||
|
int __ilogbf(x)
|
||||||
|
float x;
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
int32_t hx,ix;
|
||||||
|
|
||||||
|
GET_FLOAT_WORD(hx,x);
|
||||||
|
hx &= 0x7fffffff;
|
||||||
|
if(hx<0x00800000) {
|
||||||
|
if(hx==0)
|
||||||
|
return FP_ILOGB0; /* ilogb(0) = FP_ILOGB0 */
|
||||||
|
else /* subnormal x */
|
||||||
|
for (ix = -126,hx<<=8; hx>0; hx<<=1) ix -=1;
|
||||||
|
return ix;
|
||||||
|
}
|
||||||
|
else if (hx<0x7f800000) return (hx>>23)-127;
|
||||||
|
else if (FP_ILOGBNAN != INT_MAX) {
|
||||||
|
/* ISO C99 requires ilogbf(+-Inf) == INT_MAX. */
|
||||||
|
if (hx==0x7f800000)
|
||||||
|
return INT_MAX;
|
||||||
|
}
|
||||||
|
return FP_ILOGBNAN;
|
||||||
|
}
|
||||||
|
weak_alias (__ilogbf, ilogbf)
|
39
src/system/libroot/posix/glibc/arch/generic/s_significand.c
Normal file
39
src/system/libroot/posix/glibc/arch/generic/s_significand.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/* @(#)s_signif.c 5.1 93/09/24 */
|
||||||
|
/*
|
||||||
|
* ====================================================
|
||||||
|
* 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.
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBM_SCCS) && !defined(lint)
|
||||||
|
static char rcsid[] = "$NetBSD: s_significand.c,v 1.6 1995/05/10 20:48:11 jtc Exp $";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* significand(x) computes just
|
||||||
|
* scalb(x, (double) -ilogb(x)),
|
||||||
|
* for exercising the fraction-part(F) IEEE 754-1985 test vector.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include "math_private.h"
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
double __significand(double x)
|
||||||
|
#else
|
||||||
|
double __significand(x)
|
||||||
|
double x;
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
return __ieee754_scalb(x,(double) -__ilogb(x));
|
||||||
|
}
|
||||||
|
weak_alias (__significand, significand)
|
||||||
|
#ifdef NO_LONG_DOUBLE
|
||||||
|
strong_alias (__significand, __significandl)
|
||||||
|
weak_alias (__significand, significandl)
|
||||||
|
#endif
|
32
src/system/libroot/posix/glibc/arch/generic/s_significandf.c
Normal file
32
src/system/libroot/posix/glibc/arch/generic/s_significandf.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* s_significandf.c -- float version of s_significand.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.
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBM_SCCS) && !defined(lint)
|
||||||
|
static char rcsid[] = "$NetBSD: s_significandf.c,v 1.3 1995/05/10 20:48:13 jtc Exp $";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include "math_private.h"
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
float __significandf(float x)
|
||||||
|
#else
|
||||||
|
float __significandf(x)
|
||||||
|
float x;
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
return __ieee754_scalbf(x,(float) -__ilogbf(x));
|
||||||
|
}
|
||||||
|
weak_alias (__significandf, significandf)
|
@ -70,6 +70,7 @@ local genericSources =
|
|||||||
s_floor.c s_floorf.c # s_floorl.c
|
s_floor.c s_floorf.c # s_floorl.c
|
||||||
s_fpclassify.c s_fpclassifyf.c # s_fpclassifyl.c
|
s_fpclassify.c s_fpclassifyf.c # s_fpclassifyl.c
|
||||||
s_frexp.c s_frexpf.c # s_frexpl.c
|
s_frexp.c s_frexpf.c # s_frexpl.c
|
||||||
|
s_ilogb.c s_ilogbf.c
|
||||||
s_isinf.c s_isinff.c # s_isinfl.c
|
s_isinf.c s_isinff.c # s_isinfl.c
|
||||||
s_ldexp.c s_ldexpf.c # s_ldexpl.c
|
s_ldexp.c s_ldexpf.c # s_ldexpl.c
|
||||||
s_log1p.c s_log1pf.c
|
s_log1p.c s_log1pf.c
|
||||||
@ -79,6 +80,7 @@ local genericSources =
|
|||||||
s_round.c s_roundf.c # s_roundl.c
|
s_round.c s_roundf.c # s_roundl.c
|
||||||
s_scalbn.c s_scalbnf.c # s_scalbnl.c
|
s_scalbn.c s_scalbnf.c # s_scalbnl.c
|
||||||
s_signbit.c s_signbitf.c # s_signbitl.c
|
s_signbit.c s_signbitf.c # s_signbitl.c
|
||||||
|
s_significand.c s_significandf.c
|
||||||
s_signgam.c
|
s_signgam.c
|
||||||
s_sin.c s_sinf.c # s_sinl.c
|
s_sin.c s_sinf.c # s_sinl.c
|
||||||
s_sincos.c s_sincosf.c
|
s_sincos.c s_sincosf.c
|
||||||
|
@ -143,6 +143,7 @@ MergeObject posix_gnu_arch_$(TARGET_ARCH)_s.o :
|
|||||||
s_finite.S s_finitef.S s_finitel.S
|
s_finite.S s_finitef.S s_finitel.S
|
||||||
s_floor.S s_floorf.S s_floorl.S
|
s_floor.S s_floorf.S s_floorl.S
|
||||||
s_frexp.S s_frexpf.S s_frexpl.S
|
s_frexp.S s_frexpf.S s_frexpl.S
|
||||||
|
s_ilogb.S s_ilogbf.S
|
||||||
s_isinfl.c
|
s_isinfl.c
|
||||||
s_isnanl.c
|
s_isnanl.c
|
||||||
s_llrint.S s_llrintf.S s_llrintl.S
|
s_llrint.S s_llrintf.S s_llrintl.S
|
||||||
@ -151,6 +152,7 @@ MergeObject posix_gnu_arch_$(TARGET_ARCH)_s.o :
|
|||||||
s_lrint.S s_lrintf.S s_lrintl.S
|
s_lrint.S s_lrintf.S s_lrintl.S
|
||||||
s_rint.S s_rintf.S s_rintl.c
|
s_rint.S s_rintf.S s_rintl.c
|
||||||
s_scalbn.S s_scalbnf.S s_scalbnl.S
|
s_scalbn.S s_scalbnf.S s_scalbnl.S
|
||||||
|
s_significand.S s_significandf.S
|
||||||
s_sin.S s_sinf.S s_sinl.S
|
s_sin.S s_sinf.S s_sinl.S
|
||||||
s_sincos.S s_sincosf.S s_sincosl.S
|
s_sincos.S s_sincosf.S s_sincosl.S
|
||||||
s_tan.S s_tanf.S s_tanl.S
|
s_tan.S s_tanf.S s_tanl.S
|
||||||
|
36
src/system/libroot/posix/glibc/arch/x86/s_ilogb.S
Normal file
36
src/system/libroot/posix/glibc/arch/x86/s_ilogb.S
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: s_ilogb.S,v 1.5 1995/10/12 15:53:09 jtc Exp $")
|
||||||
|
|
||||||
|
ENTRY(__ilogb)
|
||||||
|
fldl 4(%esp)
|
||||||
|
/* I added the following ugly construct because ilogb(+-Inf) is
|
||||||
|
required to return INT_MAX in ISO C99.
|
||||||
|
-- jakub@redhat.com. */
|
||||||
|
fxam /* Is NaN or +-Inf? */
|
||||||
|
fstsw %ax
|
||||||
|
movb $0x45, %dh
|
||||||
|
andb %ah, %dh
|
||||||
|
cmpb $0x05, %dh
|
||||||
|
je 1f /* Is +-Inf, jump. */
|
||||||
|
|
||||||
|
fxtract
|
||||||
|
pushl %eax
|
||||||
|
fstp %st
|
||||||
|
|
||||||
|
fistpl (%esp)
|
||||||
|
fwait
|
||||||
|
popl %eax
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
1: fstp %st
|
||||||
|
movl $0x7fffffff, %eax
|
||||||
|
ret
|
||||||
|
END (__ilogb)
|
||||||
|
weak_alias (__ilogb, ilogb)
|
36
src/system/libroot/posix/glibc/arch/x86/s_ilogbf.S
Normal file
36
src/system/libroot/posix/glibc/arch/x86/s_ilogbf.S
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: s_ilogbf.S,v 1.4 1995/10/22 20:32:43 pk Exp $")
|
||||||
|
|
||||||
|
ENTRY(__ilogbf)
|
||||||
|
flds 4(%esp)
|
||||||
|
/* I added the following ugly construct because ilogb(+-Inf) is
|
||||||
|
required to return INT_MAX in ISO C99.
|
||||||
|
-- jakub@redhat.com. */
|
||||||
|
fxam /* Is NaN or +-Inf? */
|
||||||
|
fstsw %ax
|
||||||
|
movb $0x45, %dh
|
||||||
|
andb %ah, %dh
|
||||||
|
cmpb $0x05, %dh
|
||||||
|
je 1f /* Is +-Inf, jump. */
|
||||||
|
|
||||||
|
fxtract
|
||||||
|
pushl %eax
|
||||||
|
fstp %st
|
||||||
|
|
||||||
|
fistpl (%esp)
|
||||||
|
fwait
|
||||||
|
popl %eax
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
1: fstp %st
|
||||||
|
movl $0x7fffffff, %eax
|
||||||
|
ret
|
||||||
|
END (__ilogbf)
|
||||||
|
weak_alias (__ilogbf, ilogbf)
|
16
src/system/libroot/posix/glibc/arch/x86/s_significand.S
Normal file
16
src/system/libroot/posix/glibc/arch/x86/s_significand.S
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: s_significand.S,v 1.4 1995/05/09 00:21:47 jtc Exp $")
|
||||||
|
|
||||||
|
ENTRY(__significand)
|
||||||
|
fldl 4(%esp)
|
||||||
|
fxtract
|
||||||
|
fstp %st(1)
|
||||||
|
ret
|
||||||
|
END (__significand)
|
||||||
|
weak_alias (__significand, significand)
|
16
src/system/libroot/posix/glibc/arch/x86/s_significandf.S
Normal file
16
src/system/libroot/posix/glibc/arch/x86/s_significandf.S
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
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)
|
||||||
|
weak_alias (__significandf, significandf)
|
Loading…
x
Reference in New Issue
Block a user