History log of /seL4-camkes-master/projects/musllibc/src/math/i386/sqrt.s
Revision Date Author Comments
# ec431894 05-Nov-2014 Szabolcs Nagy <nsz@port70.net>

math: use fnstsw consistently instead of fstsw in x87 asm

fnstsw does not wait for pending unmasked x87 floating-point exceptions
and it is the same as fstsw when all exceptions are masked which is the
only environment libc supports.


# 9d507419 15-Mar-2012 Rich Felker <dalias@aerifal.cx>

remove special nan handling from x86 sqrt asm

a double precision nan, when converted to extended (80-bit) precision,
will never end in 0x400, since the corresponding bits do not exist in
the original double precision value. thus there's no need to waste
time and code size on this check.


# 1295848e 14-Mar-2012 Rich Felker <dalias@aerifal.cx>

simplify nan check in sqrt (x86 asm); result of sqrt is never negative


# 46702f68 14-Mar-2012 Rich Felker <dalias@aerifal.cx>

avoid changing NaNs in sqrt (x86 asm) to satisfy c99 f.9 recommendation


# 809556e6 14-Mar-2012 Rich Felker <dalias@aerifal.cx>

correctly rounded sqrt() asm for x86 (i387)

the fsqrt opcode is correctly rounded, but only in the fpu's selected
precision mode, which is 80-bit extended precision. to get a correctly
rounded double precision output, we check for the only corner cases
where two-step rounding could give different results than one-step
(extended-precision mantissa ending in 0x400) and adjust the mantissa
slightly in the opposite direction of the rounding which the fpu
already did (reported in the c1 flag of the fpu status word).

this should have near-zero cost in the non-corner cases and at worst
very low cost.

note that in order for sqrt() to get used when compiling with gcc, the
broken, non-conformant builtin sqrt must be disabled.


# b69f695a 12-Mar-2012 Rich Felker <dalias@aerifal.cx>

first commit of the new libm!

thanks to the hard work of Szabolcs Nagy (nsz), identifying the best
(from correctness and license standpoint) implementations from freebsd
and openbsd and cleaning them up! musl should now fully support c99
float and long double math functions, and has near-complete complex
math support. tgmath should also work (fully on gcc-compatible
compilers, and mostly on any c99 compiler).

based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from
nsz's libm git repo, with some additions (dummy versions of a few
missing long double complex functions, etc.) by me.

various cleanups still need to be made, including re-adding (if
they're correct) some asm functions that were dropped.