diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/math/i386/sqrtf.c | 12 | ||||
| -rw-r--r-- | src/math/i386/sqrtf.s | 7 | 
2 files changed, 12 insertions, 7 deletions
| diff --git a/src/math/i386/sqrtf.c b/src/math/i386/sqrtf.c new file mode 100644 index 00000000..41c65c2b --- /dev/null +++ b/src/math/i386/sqrtf.c @@ -0,0 +1,12 @@ +#include <math.h> + +float sqrtf(float x) +{ +	long double t; +	/* The long double result has sufficient precision so that +	 * second rounding to float still keeps the returned value +	 * correctly rounded, see Pierre Roux, "Innocuous Double +	 * Rounding of Basic Arithmetic Operations". */ +	__asm__ ("fsqrt" : "=t"(t) : "0"(x)); +	return (float)t; +} diff --git a/src/math/i386/sqrtf.s b/src/math/i386/sqrtf.s deleted file mode 100644 index 9e944f45..00000000 --- a/src/math/i386/sqrtf.s +++ /dev/null @@ -1,7 +0,0 @@ -.global sqrtf -.type sqrtf,@function -sqrtf:	flds 4(%esp) -	fsqrt -	fstps 4(%esp) -	flds 4(%esp) -	ret | 
