aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu
AgeCommit message (Collapse)Author
2013-07-03Update i386 ULPs.Allan McRae
* sysdeps/i386/fpu/libm-test-ulps: Update.
2013-07-02Regenerate x86 and x86_64 ulps.Joseph Myers
2013-06-12Set/restore rounding mode only when neededSiddhesh Poyarekar
The most common use case of math functions is with default rounding mode, i.e. rounding to nearest. Setting and restoring rounding mode is an unnecessary overhead for this, so I've added support for a context, which does the set/restore only if the FP status needs a change. The code is written such that only x86 uses these. Other architectures should be unaffected by it, but would definitely benefit if the set/restore has as much overhead relative to the rest of the code, as the x86 bits do. Here's a summary of the performance improvement due to these improvements; I've only mentioned functions that use the set/restore and have benchmark inputs for x86_64: Before: cos(): ITERS:4.69335e+08: TOTAL:28884.6Mcy, MAX:4080.28cy, MIN:57.562cy, 16248.6 calls/Mcy exp(): ITERS:4.47604e+08: TOTAL:28796.2Mcy, MAX:207.721cy, MIN:62.385cy, 15543.9 calls/Mcy pow(): ITERS:1.63485e+08: TOTAL:28879.9Mcy, MAX:362.255cy, MIN:172.469cy, 5660.86 calls/Mcy sin(): ITERS:3.89578e+08: TOTAL:28900Mcy, MAX:704.859cy, MIN:47.583cy, 13480.2 calls/Mcy tan(): ITERS:7.0971e+07: TOTAL:28902.2Mcy, MAX:1357.79cy, MIN:388.58cy, 2455.55 calls/Mcy After: cos(): ITERS:6.0014e+08: TOTAL:28875.9Mcy, MAX:364.283cy, MIN:45.716cy, 20783.4 calls/Mcy exp(): ITERS:5.48578e+08: TOTAL:28764.9Mcy, MAX:191.617cy, MIN:51.011cy, 19071.1 calls/Mcy pow(): ITERS:1.70013e+08: TOTAL:28873.6Mcy, MAX:689.522cy, MIN:163.989cy, 5888.18 calls/Mcy sin(): ITERS:4.64079e+08: TOTAL:28891.5Mcy, MAX:6959.3cy, MIN:36.189cy, 16062.8 calls/Mcy tan(): ITERS:7.2354e+07: TOTAL:28898.9Mcy, MAX:1295.57cy, MIN:380.698cy, 2503.7 calls/Mcy So the improvements are: cos: 27.9089% exp: 22.6919% pow: 4.01564% sin: 19.1585% tan: 1.96086% The downside of the change is that it will have an adverse performance impact on non-default rounding modes, but I think the tradeoff is justified.
2013-05-31Link extra-libs consistently with libc and ld.so.Joseph Myers
2013-05-24Test drem and pow10 in libm-test.inc.Joseph Myers
2013-05-24Use same tests for isfinite/finite, lgamma/gamma.Joseph Myers
2013-05-22Don't include expected results in libm-test test names.Joseph Myers
2013-05-19Handle sincos with generic libm-test logic.Joseph Myers
2013-05-12Convert TEST_ff_f tests from code to data.Joseph Myers
2013-05-08Improve tgamma accuracy (bugs 2546, 2560, 5159, 15426).Joseph Myers
2013-05-01Fix catan, catanh spurious underflows (bug 15423).Joseph Myers
2013-04-30Fix catan, catanh inaccuracy from atan2 denominators near 0 (bug 15416).Joseph Myers
2013-04-27Fix catan, catanh spurious overflows (bug 15409).Joseph Myers
2013-04-27Update i386 libm-test ULPsAllan McRae
2013-04-24Fix catan, catanh inaccuracy through use of log (bug 15394).Joseph Myers
2013-04-11libm-test.inc: Fix tests where cos(PI/2) != 0.Carlos O'Donell
The value of PI is never exactly PI in any floating point representation, and the value of PI/2 is never PI/2. It is wrong to expect cos(M_PI_2l) to return 0, instead it will return an answer that is non-zero because M_PI_2l doesn't round to exactly PI/2 in the type used. That is to say that the correct answer is to do the following: * Take PI or PI/2. * Round to the floating point representation. * Take the rounded value and compute an infinite precision cos or sin. * Use the rounded result of the infinite precision cos or sin as the answer to the test. I used printf to do the type rounding, and Wolfram's Alpha to do the infinite precision cos calculations. The following changes bring x86-64 and x86 to 1/2 ulp for two tests. It shows that the x86 cos implementation is quite good, and that our test are flawed. Unfortunately given that the rounding errors are type dependent we need to fix this for each type. No regressions on x86-64 or x86. --- 2013-04-11 Carlos O'Donell <carlos@redhat.com> * math/libm-test.inc (cos_test): Fix PI/2 test. (sincos_test): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Regenerate. * sysdeps/i386/fpu/libm-test-ulps: Regenerate.
2013-04-03Refer to two GCC PRs.Thomas Schwinge
2013-04-02Fix cacosh inaccuracy and spurious exceptions (bug 15327).Joseph Myers
2013-03-30Fix casinh inaccuracy for imaginary part < 1.0, real part small (bug 10357).Joseph Myers
2013-03-27Fix casinh inaccuracy near i, imaginary part > 1 (bug 15307).Joseph Myers
2013-03-21On 32-bit x86, disable certain tests involving sNaN values.Thomas Schwinge
Follow-up to commit 495ded2c8c1eb8c0ac4b54add2dd397852e19cba.
2013-03-21Fix Bessel function spurious overflows for ldbl-128 / ldbl-128ibm (bug 15285).Joseph Myers
2013-03-21Fix casinh inaccuracy for argument with imaginary part 1 (bug 15287).Joseph Myers
2013-03-16Fix y1l spurious overflows for ldbl-96 (bug 15283).Joseph Myers
2013-02-21Remove remaining bounded-pointers support from i386 .S files.Joseph Myers
2013-02-19Remove some bounded-pointers support from i386 .S files.Joseph Myers
2013-02-14Remove bp-sym.h and BP_SYM uses from C code.Joseph Myers
2013-01-31Fix casinh spurious underflows away from [-i,i] (bug 15062).Joseph Myers
2013-01-18Fix application of the exception maskSiddhesh Poyarekar
Fixes BZ #14496.
2013-01-17Fix cacos real-part inaccuracy for result real part near 0 (bug 15023).Joseph Myers
2013-01-07Fix casinh, casin overflow (bug 14996).Joseph Myers
2013-01-04Fix casinh, casin inaccuracy from cancellation (bug 14994).Joseph Myers
2013-01-02Update copyright notices with scripts/update-copyrights.Joseph Myers
2012-11-28Fix powl inaccuracy for x86_64 and x86 (bug 13881).Joseph Myers
2012-11-22Update i386 libm-test ULPsAndreas Schwab
2012-11-18Correct tinyness handling in long-double and float y0/y1.David S. Miller
With help from Joseph Myers. * sysdeps/ieee754/flt-32/e_j0f.c (__ieee754_y0f): Adjust tinyness cutoff to 2**-13. * sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Adjust tinyness cutoff to 2**-25. * sysdeps/ieee754/ldbl-128/e_j0l.c (U0): New constant. ( __ieee754_y0l): Avoid arithmetic underflow when 'x' is very small. * sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_y1l): Likewise. * math/libm-test.inc (y0_test): New tests. (y1_test): New tests. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Update. * sysdeps/sparc/fpu/libm-test-ulps: Update.
2012-11-07Fix spurious underflows from pow with results close to 1 (bug 14811).Joseph Myers
2012-11-03Make fma use of Dekker and Knuth algorithms use round-to-nearest (bug 14796).Joseph Myers
2012-09-25Fix inaccuracy of clog, clog10 near |z| = 1 (bug 13629).Joseph Myers
2012-09-25Add optimized sincosf for SSE2 for x86 and x86-64Liubov Dmitrieva
2012-09-12Update i386 ULPs for recently added math testsAllan McRae
2012-09-03Update libm-test-ulpsAndreas Jaeger
2012-08-14Another ULPs update.Andreas Jaeger
2012-08-14Update i386 ULPsAndreas Jaeger
2012-08-02Get rid of ASM_TYPE_DIRECTIVE{,_PREFIX}.Marek Polacek
2012-07-31Improve clog, clog10 handling of values with real or imaginary part slightly ↵Joseph Myers
above 1 (bug 13629).
2012-07-26Improve clog, clog10 handling of values with real or imaginary part 1 (bug ↵Joseph Myers
13629).
2012-07-09Fix clog, clog10 spurious underflow exceptions (bug 14337).Joseph Myers
2012-07-06Fix tanf underflow close to pi/4 (bug 14154).Joseph Myers
2012-07-06Fix expm1 spurious underflow exceptions (bug 6778).Joseph Myers