about summary refs log tree commit diff
path: root/src/fenv
Commit message (Collapse)AuthorAgeFilesLines
* fix fesetenv(FE_DFL_ENV) on x86_64 (see previous commit)Szabolcs Nagy2014-02-091-1/+1
|
* fix fesetenv(FE_DFL_ENV) on i386Szabolcs Nagy2014-02-091-1/+1
| | | | | | | | | | | 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).
* fenv: fix i386 fesetround for sseSzabolcs Nagy2013-10-281-1/+1
| | | | | | 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.
* fix invalid instruction mnemonics in powerpc fenv asmRich Felker2013-08-271-3/+3
| | | | | 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.
* fix fenv exception functions to mask their argumentSzabolcs Nagy2013-08-188-18/+55
| | | | | | | | | | | 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
* optimize x86 feclearexcept: only use save/restore x87 fenv if neededSzabolcs Nagy2013-08-182-27/+38
| | | | | | | 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.
* add sse fenv support on i386 through hwcapSzabolcs Nagy2013-08-182-9/+61
| | | | | | | 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)
* fix i386 fesetenv: FE_DFL_ENV is (fenv_t*)-1 not 0Szabolcs Nagy2013-08-181-2/+2
|
* support floating point environment (fenv) on armhf (hard float) subarchsRich Felker2013-08-163-0/+62
| | | | | patch by nsz. I've tested it on an armhf machine and it seems to be working correctly.
* fenv support for ppc, untestedRich Felker2012-11-181-0/+120
| | | | based on code sent to the mailing list by nsz, with minor changes.
* fix feholdexcept -- it needs to clear exceptions after saving environmentRich Felker2012-11-181-0/+1
|
* fenv: return FE_TONEAREST in dummy fegetroundSzabolcs Nagy2012-11-141-1/+1
|
* math: use '#pragma STDC FENV_ACCESS ON' when fenv is accessedSzabolcs Nagy2012-11-131-0/+1
|
* floating point environment/exceptions support for mipsRich Felker2012-10-181-0/+60
|
* try fixing/optimizing x86_64 fenv exception codeRich Felker2012-03-171-18/+23
| | | | untested; may need followup-fixes.
* optimize x86 feclearexceptRich Felker2012-03-171-16/+20
| | | | | if all exception flags will be cleared, we can avoid the expensive store/reload of the environment and just use the fnclex instruction.
* fix x86_64 fe[gs]etround, analogous to nsz's x86 changesRich Felker2012-03-171-8/+9
|
* minor 387 fenv optimizationsRich Felker2012-03-171-6/+5
|
* fix i386 fegetround and make fesetround fasternsz2012-03-171-10/+10
| | | | | | | | | | | | | | | | | | | | | 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).
* use type directives for fenv asm functionsRich Felker2011-06-282-0/+14
|
* x86_64 fenv support (untested; at least known to build successfully)Rich Felker2011-06-131-0/+88
|
* fix fesetround - it was writing to status word instead of control wordRich Felker2011-06-131-3/+8
|
* floating point environment, untestedRich Felker2011-06-126-0/+144
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.