Complete action from 2001-12-18:
* libc/machine/i386/f_*: Remove duplicate files.
This commit is contained in:
parent
5ae2368e92
commit
2ee3908b45
|
@ -1,3 +1,8 @@
|
||||||
|
2015-01-23 Corinna Vinschen <vinschen@redhat.com>
|
||||||
|
|
||||||
|
Complete action from 2001-12-18:
|
||||||
|
* libc/machine/i386/f_*: Remove duplicate files.
|
||||||
|
|
||||||
2015-01-22 Yaakov Selkowitz <yselkowi@redhat.com>
|
2015-01-22 Yaakov Selkowitz <yselkowi@redhat.com>
|
||||||
|
|
||||||
* libc/sys/sparc64/sys/time.h: #include <sys/types.h> for time_t.
|
* libc/sys/sparc64/sys/time.h: #include <sys/types.h> for time_t.
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of atan2 using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_atan2 (double y, double x);
|
|
||||||
|
|
||||||
Function computes arctan ( y / x ).
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_atan2)
|
|
||||||
SOTYPE_FUNCTION(_f_atan2)
|
|
||||||
|
|
||||||
SYM (_f_atan2):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
fldl 8(ebp)
|
|
||||||
fldl 16(ebp)
|
|
||||||
fpatan
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of atan2f using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_atan2f (float y, float x);
|
|
||||||
|
|
||||||
Function computes arctan ( y / x ).
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_atan2f)
|
|
||||||
SOTYPE_FUNCTION(_f_atan2f)
|
|
||||||
|
|
||||||
SYM (_f_atan2f):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
flds 8(ebp)
|
|
||||||
flds 12(ebp)
|
|
||||||
fpatan
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998,2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of exp using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_exp (double x);
|
|
||||||
|
|
||||||
Function computes e ** x. The following special cases exist:
|
|
||||||
1. if x is 0.0 ==> return 1.0
|
|
||||||
2. if x is infinity ==> return infinity
|
|
||||||
3. if x is -infinity ==> return 0.0
|
|
||||||
4. if x is NaN ==> return x
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <ieeefp.h>
|
|
||||||
#include "f_math.h"
|
|
||||||
|
|
||||||
double _f_exp (double x)
|
|
||||||
{
|
|
||||||
if (check_finite(x))
|
|
||||||
{
|
|
||||||
double result;
|
|
||||||
asm ("fldl2e; fmulp; fld %%st; frndint; fsub %%st,%%st(1); fxch;" \
|
|
||||||
"fchs; f2xm1; fld1; faddp; fxch; fld1; fscale; fstp %%st(1); fmulp" :
|
|
||||||
"=t"(result) : "0"(x));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else if (x == -infinity())
|
|
||||||
return 0.0;
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of exp using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_expf (float x);
|
|
||||||
|
|
||||||
Function computes e ** x. The following special cases exist:
|
|
||||||
1. if x is 0.0 ==> return 1.0
|
|
||||||
2. if x is infinity ==> return infinity
|
|
||||||
3. if x is -infinity ==> return 0.0
|
|
||||||
4. if x is NaN ==> return x
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <ieeefp.h>
|
|
||||||
#include "f_math.h"
|
|
||||||
|
|
||||||
float _f_expf (float x)
|
|
||||||
{
|
|
||||||
if (check_finitef(x))
|
|
||||||
{
|
|
||||||
float result;
|
|
||||||
asm ("fldl2e; fmulp; fld %%st; frndint; fsub %%st,%%st(1); fxch;" \
|
|
||||||
"fchs; f2xm1; fld1; faddp; fxch; fld1; fscale; fstp %%st(1); fmulp" :
|
|
||||||
"=t"(result) : "0"(x));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else if (x == -infinityf())
|
|
||||||
return 0.0;
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of frexp using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_frexp (double x, int *exp);
|
|
||||||
|
|
||||||
Function splits x into y * 2 ** z. It then
|
|
||||||
returns the value of y and updates *exp with z.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_frexp)
|
|
||||||
SOTYPE_FUNCTION(_f_frexp)
|
|
||||||
|
|
||||||
SYM (_f_frexp):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
fldl 8(ebp)
|
|
||||||
movl 16(ebp),eax
|
|
||||||
|
|
||||||
fxtract
|
|
||||||
fld1
|
|
||||||
fchs
|
|
||||||
fxch
|
|
||||||
fscale
|
|
||||||
fstp st1
|
|
||||||
fxch
|
|
||||||
fld1
|
|
||||||
faddp
|
|
||||||
fistpl 0(eax)
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of frexpf using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_frexpf (float x, int *exp);
|
|
||||||
|
|
||||||
Function splits x into y * 2 ** z. It then
|
|
||||||
returns the value of y and updates *exp with z.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_frexpf)
|
|
||||||
SOTYPE_FUNCTION(_f_frexpf)
|
|
||||||
|
|
||||||
SYM (_f_frexpf):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
flds 8(ebp)
|
|
||||||
movl 12(ebp),eax
|
|
||||||
|
|
||||||
fxtract
|
|
||||||
fld1
|
|
||||||
fchs
|
|
||||||
fxch
|
|
||||||
fscale
|
|
||||||
fstp st1
|
|
||||||
fxch
|
|
||||||
fld1
|
|
||||||
faddp
|
|
||||||
fistpl 0(eax)
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of ldexp using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_ldexp (double x, int exp);
|
|
||||||
|
|
||||||
Function calculates x * 2 ** exp.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_ldexp)
|
|
||||||
SOTYPE_FUNCTION(_f_ldexp)
|
|
||||||
|
|
||||||
SYM (_f_ldexp):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
fild 16(ebp)
|
|
||||||
fldl 8(ebp)
|
|
||||||
fscale
|
|
||||||
fstp st1
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of ldexpf using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_ldexpf (float x, int exp);
|
|
||||||
|
|
||||||
Function calculates x * 2 ** exp.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_ldexpf)
|
|
||||||
SOTYPE_FUNCTION(_f_ldexpf)
|
|
||||||
|
|
||||||
SYM (_f_ldexpf):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
fild 12(ebp)
|
|
||||||
flds 8(ebp)
|
|
||||||
fscale
|
|
||||||
fstp st1
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of log using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_log (double x);
|
|
||||||
|
|
||||||
Function calculates the log base e of x.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_log)
|
|
||||||
SOTYPE_FUNCTION(_f_log)
|
|
||||||
|
|
||||||
SYM (_f_log):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
|
|
||||||
fld1
|
|
||||||
fldl2e
|
|
||||||
fdivrp
|
|
||||||
fldl 8(ebp)
|
|
||||||
fyl2x
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of log10 using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_log10 (double x);
|
|
||||||
|
|
||||||
Function calculates the log base 10 of x.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_log10)
|
|
||||||
SOTYPE_FUNCTION(_f_log10)
|
|
||||||
|
|
||||||
SYM (_f_log10):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
|
|
||||||
fld1
|
|
||||||
fldl2t
|
|
||||||
fdivrp
|
|
||||||
fldl 8(ebp)
|
|
||||||
fyl2x
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of logf using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_log10f (float x);
|
|
||||||
|
|
||||||
Function calculates the log base 10 of x.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_log10f)
|
|
||||||
SOTYPE_FUNCTION(_f_log10f)
|
|
||||||
|
|
||||||
SYM (_f_log10f):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
|
|
||||||
fld1
|
|
||||||
fldl2t
|
|
||||||
fdivrp
|
|
||||||
flds 8(ebp)
|
|
||||||
fyl2x
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of logf using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_logf (float x);
|
|
||||||
|
|
||||||
Function calculates the log base e of x.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_logf)
|
|
||||||
SOTYPE_FUNCTION(_f_logf)
|
|
||||||
|
|
||||||
SYM (_f_logf):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
|
|
||||||
fld1
|
|
||||||
fldl2e
|
|
||||||
fdivrp
|
|
||||||
flds 8(ebp)
|
|
||||||
fyl2x
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,29 +0,0 @@
|
||||||
#ifndef __F_MATH_H__
|
|
||||||
#define __F_MATH_H__
|
|
||||||
|
|
||||||
#include <_ansi.h>
|
|
||||||
#include "fdlibm.h"
|
|
||||||
|
|
||||||
__inline__
|
|
||||||
static
|
|
||||||
int
|
|
||||||
_DEFUN (check_finite, (x),
|
|
||||||
double x)
|
|
||||||
{
|
|
||||||
__int32_t hx;
|
|
||||||
GET_HIGH_WORD(hx,x);
|
|
||||||
return (int)((__uint32_t)((hx&0x7fffffff)-0x7ff00000)>>31);
|
|
||||||
}
|
|
||||||
|
|
||||||
__inline__
|
|
||||||
static
|
|
||||||
int
|
|
||||||
_DEFUN (check_finitef, (x),
|
|
||||||
float x)
|
|
||||||
{
|
|
||||||
__int32_t ix;
|
|
||||||
GET_FLOAT_WORD(ix,x);
|
|
||||||
return (int)((__uint32_t)((ix&0x7fffffff)-0x7f800000)>>31);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __F_MATH_H__ */
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of pow using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_pow (double x, double y);
|
|
||||||
|
|
||||||
Function calculates x to power of y.
|
|
||||||
The function optimizes the case where x is >0.0 and y is finite.
|
|
||||||
In such a case, there is no error checking or setting of errno.
|
|
||||||
All other cases defer to normal pow() function which will
|
|
||||||
set errno as normal.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <ieeefp.h>
|
|
||||||
#include "f_math.h"
|
|
||||||
|
|
||||||
double _f_pow (double x, double y)
|
|
||||||
{
|
|
||||||
/* following sequence handles the majority of cases for pow() */
|
|
||||||
if (x > 0.0 && check_finite(y))
|
|
||||||
{
|
|
||||||
double result;
|
|
||||||
/* calculate x ** y as 2 ** (y log2(x)). On Intel, can only
|
|
||||||
raise 2 to an integer or a small fraction, thus, we have
|
|
||||||
to perform two steps 2**integer portion * 2**fraction. */
|
|
||||||
asm ("fldl 8(%%ebp); fyl2x; fld %%st; frndint; fsub %%st,%%st(1);" \
|
|
||||||
"fxch; fchs; f2xm1; fld1; faddp; fxch; fld1; fscale; fstp %%st(1);"\
|
|
||||||
"fmulp" : "=t" (result) : "0" (y));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else /* all other strange cases, defer to normal pow() */
|
|
||||||
return pow (x,y);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of pow using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_powf (float x, float y);
|
|
||||||
|
|
||||||
Function calculates x to power of y.
|
|
||||||
The function optimizes the case where x is >0.0 and y is finite.
|
|
||||||
In such a case, there is no error checking or setting of errno.
|
|
||||||
All other cases defer to normal powf() function which will
|
|
||||||
set errno as normal.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <ieeefp.h>
|
|
||||||
#include "f_math.h"
|
|
||||||
|
|
||||||
float _f_powf (float x, float y)
|
|
||||||
{
|
|
||||||
/* following sequence handles the majority of cases for pow() */
|
|
||||||
if (x > 0.0 && check_finitef(y))
|
|
||||||
{
|
|
||||||
float result;
|
|
||||||
/* calculate x ** y as 2 ** (y log2(x)). On Intel, can only
|
|
||||||
raise 2 to an integer or a small fraction, thus, we have
|
|
||||||
to perform two steps 2**integer portion * 2**fraction. */
|
|
||||||
asm ("flds 8(%%ebp); fyl2x; fld %%st; frndint; fsub %%st,%%st(1);" \
|
|
||||||
"fxch; fchs; f2xm1; fld1; faddp; fxch; fld1; fscale; fstp %%st(1);"\
|
|
||||||
"fmulp" : "=t" (result) : "0" (y));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else /* all other strange cases, defer to normal pow() */
|
|
||||||
return powf (x,y);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of tan using Intel float instructions.
|
|
||||||
|
|
||||||
double _f_tan (double x);
|
|
||||||
|
|
||||||
Function calculates the tangent of x.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_tan)
|
|
||||||
SOTYPE_FUNCTION(_f_tan)
|
|
||||||
|
|
||||||
SYM (_f_tan):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
fldl 8(ebp)
|
|
||||||
fptan
|
|
||||||
fincstp
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* ====================================================
|
|
||||||
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this
|
|
||||||
* software is freely granted, provided that this notice
|
|
||||||
* is preserved.
|
|
||||||
* ====================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_SOFT_FLOAT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fast version of tanf using Intel float instructions.
|
|
||||||
|
|
||||||
float _f_tanf (float x);
|
|
||||||
|
|
||||||
Function calculates the tangent of x.
|
|
||||||
There is no error checking or setting of errno.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "i386mach.h"
|
|
||||||
|
|
||||||
.global SYM (_f_tanf)
|
|
||||||
SOTYPE_FUNCTION(_f_tanf)
|
|
||||||
|
|
||||||
SYM (_f_tanf):
|
|
||||||
pushl ebp
|
|
||||||
movl esp,ebp
|
|
||||||
flds 8(ebp)
|
|
||||||
fptan
|
|
||||||
fincstp
|
|
||||||
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue