Commit Graph
30 Commits
Author SHA1 Message Date
Rich Felker b1683a1d6a add nofpu subarchs to the sh arch, and properly detect compiler's fpu config 2014-02-27 23:18:42 -05:00
Rich Felker aacd348637 rename superh port to "sh" for consistency
linux, gcc, etc. all use "sh" as the name for the superh arch. there
was already some inconsistency internally in musl: the dynamic linker
was searching for "ld-musl-sh.path" as its path file despite its own
name being "ld-musl-superh.so.1". there was some sentiment in both
directions as to how to resolve the inconsistency, but overall "sh"
was favored.
2014-02-27 22:03:25 -05:00
Rich Felker e7837ec79f add missing sub files for mipsel-sf to use softfloat code
the build system has no automatic way to know this code applies to
both big (default) and little endian variants, so explicit .sub files
are needed.
2014-02-24 17:31:00 -05:00
Szabolcs Nagy e5bb165bed mips: add mips-sf subarch support (soft-float)
Userspace emulated floating-point (gcc -msoft-float) is not compatible
with the default mips abi (assumes an FPU or in kernel emulation of it).
Soft vs hard float abi should not be mixed, __mips_soft_float is checked
in musl's configure script and there is no runtime check. The -sf subarch
does not save/restore floating-point registers in setjmp/longjmp and only
provides dummy fenv implementation.
2014-02-24 23:16:29 +01:00
Bobby Bingham 3a3c813e08 superh port 2014-02-23 16:15:54 -06:00
rofl0r 664cd34192 x32 port (diff against vanilla x86_64) 2014-02-23 11:09:16 +01:00
rofl0r 323272db17 import vanilla x86_64 code as x32 2014-02-23 11:07:18 +01:00
Szabolcs Nagy 7ee48f7b69 fix fesetenv(FE_DFL_ENV) on x86_64 (see previous commit) 2014-02-09 18:39:53 +01:00
Szabolcs Nagy 929729d430 fix fesetenv(FE_DFL_ENV) on i386
the default fenv was not set up properly, in particular the
tag word that indicates the contents of the x87 registers was
set to 0 (used) instead of 0xffff (empty)

this could cause random crashes after setting the default fenv
because it corrupted the fpu stack and then any float computation
gives NaN result breaking the program logic (usually after a
float to integer conversion).
2014-02-09 18:19:03 +01:00
Szabolcs Nagy 7e01b8f09b fenv: fix i386 fesetround for sse
i386 fenv code checks __hwcap for sse support, but in fesetround the sse
code was unconditionally jumped over after the test so the sse rounding
mode was never set.
2013-10-28 20:33:54 +00:00
Rich Felker ebc87349fe fix invalid instruction mnemonics in powerpc fenv asm
there is no non-dot version of the andis instruction, but there's no
harm in updating the flags anyway, so just use the dot version.
2013-08-27 18:54:46 -04:00
Szabolcs Nagy a6b0170a7f fix fenv exception functions to mask their argument
fesetround.c is a wrapper to do the arch independent argument
check (on archs where rounding mode is not stored in 2 bits
__fesetround still has to check its arguments)

on powerpc fe*except functions do not accept the extra invalid
flags of its fpscr register

the useless FENV_ACCESS pragma was removed from feupdateenv
2013-08-18 20:08:18 +00:00
Szabolcs Nagy d8764bf840 optimize x86 feclearexcept: only use save/restore x87 fenv if needed
the x87 exception summary (ES) and stack fault (SF) flags may be
spuriously cleared by feclearexcept using the fnclex instruction,
but these flags are not observable through libc hence maintaining
their state is not critical.
2013-08-18 16:27:21 +00:00
Szabolcs Nagy ebc10fa176 add sse fenv support on i386 through hwcap
the sse and x87 rounding modes should be always the same,
the visible exception flags are the bitwise or of the two
fenv states (so it's enough to query the rounding mode or
raise exceptions on one fenv)
2013-08-18 16:27:20 +00:00
Szabolcs Nagy d684149910 fix i386 fesetenv: FE_DFL_ENV is (fenv_t*)-1 not 0 2013-08-18 16:27:20 +00:00
Rich Felker 7318c62e64 support floating point environment (fenv) on armhf (hard float) subarchs
patch by nsz. I've tested it on an armhf machine and it seems to be
working correctly.
2013-08-16 12:30:37 -04:00
Rich Felker 75c450cff3 fenv support for ppc, untested
based on code sent to the mailing list by nsz, with minor changes.
2012-11-18 16:31:14 -05:00
Rich Felker 0b52bf5c78 fix feholdexcept -- it needs to clear exceptions after saving environment 2012-11-18 16:10:20 -05:00
Szabolcs Nagy 68847ecd3a fenv: return FE_TONEAREST in dummy fegetround 2012-11-14 09:27:54 +01:00
Szabolcs Nagy 033a9d6ad2 math: use '#pragma STDC FENV_ACCESS ON' when fenv is accessed 2012-11-13 13:34:45 +01:00
Rich Felker f321de9e0a floating point environment/exceptions support for mips 2012-10-18 20:19:53 -04:00
Rich Felker b60053e762 try fixing/optimizing x86_64 fenv exception code
untested; may need followup-fixes.
2012-03-17 20:10:02 -04:00
Rich Felker 316e024f63 optimize x86 feclearexcept
if all exception flags will be cleared, we can avoid the expensive
store/reload of the environment and just use the fnclex instruction.
2012-03-17 19:29:00 -04:00
Rich Felker 9cb6878e74 fix x86_64 fe[gs]etround, analogous to nsz's x86 changes 2012-03-17 18:02:20 -04:00
Rich Felker d5e576c752 minor 387 fenv optimizations 2012-03-17 17:49:10 -04:00
nsz 88cfaf8a14 fix i386 fegetround and make fesetround faster
Note that the new fesetround has slightly different semantics:

Storing the floating-point environment with fnstenv makes the
next fldenv (or fldcw) "non-signaling", so unmasked and pending
exceptions does not invoke the exception handler.
(These are rare since exceptions are handled immediately and by
default all exceptions are masked anyway. But if one manually
unmasks an exception in the control word then either sets the
corresponding exception flag in the status word or the execution
of an exception raising floating-point operation gets interrupted
then it may happen).
So the old implementation did not trap in some rare cases
where the new implementation traps.

However POSIX does not specify anything like the x87 exception
handling traps and the fnstenv/fldenv pair is significantly slower
than the fnstcw/fldcw pair (new code is about 5x faster here and
it's dominated by the function call overhead).
2012-03-17 13:46:15 +01:00
Rich Felker e411827960 use type directives for fenv asm functions 2011-06-28 14:41:41 -04:00
Rich Felker 773b0fe447 x86_64 fenv support (untested; at least known to build successfully) 2011-06-13 13:37:43 -04:00
Rich Felker 52cf24a0f4 fix fesetround - it was writing to status word instead of control word 2011-06-13 13:37:16 -04:00
Rich Felker b09b78905b floating point environment, untested
at present the i386 code does not support sse floating point, which is
not part of the standard i386 abi. while it may be desirable to
support it later, doing so will reduce performance and require some
tricks to probe if sse support is present.

this first commit is i386-only, but it should be trivial to port the
asm to x86_64.
2011-06-12 15:58:15 -04:00