Fix x86 / x86_64 expl, exp10l missing underflows (bug 16361).

Similar to various other bugs in this area, the x86 and x86_64
implementations of expl / exp10l can fail to produce underflow
exceptions when the unscaled result has trailing 0 bits so the scaling
down to subnormal precision is exact.  This patch fixes this by
forcing the exception in the case of tiny results.

Tested for x86_64 and x86.

	[BZ #16361]
	* sysdeps/i386/fpu/e_expl.S [!USE_AS_EXPM1L] (cmin): New object.
	[!USE_AS_EXPM1L] (IEEE754_EXPL): Force underflow exception for
	tiny results.
	* sysdeps/x86_64/fpu/e_expl.S [!USE_AS_EXPM1L] (cmin): New object.
	[!USE_AS_EXPM1L] (IEEE754_EXPL): Force underflow exception for
	tiny results.
	* math/auto-libm-test-in: Add more tests of exp and exp10.  Do not
	mark underflow exceptions as possibly missing for bug 16361.
	* math/auto-libm-test-out: Regenerated.
This commit is contained in:
Joseph Myers 2015-06-21 17:48:04 +00:00
parent d6cc0b4fea
commit 7540cfc5a8
6 changed files with 294 additions and 43 deletions

View File

@ -1,3 +1,16 @@
2015-06-21 Joseph Myers <joseph@codesourcery.com>
[BZ #16361]
* sysdeps/i386/fpu/e_expl.S [!USE_AS_EXPM1L] (cmin): New object.
[!USE_AS_EXPM1L] (IEEE754_EXPL): Force underflow exception for
tiny results.
* sysdeps/x86_64/fpu/e_expl.S [!USE_AS_EXPM1L] (cmin): New object.
[!USE_AS_EXPM1L] (IEEE754_EXPL): Force underflow exception for
tiny results.
* math/auto-libm-test-in: Add more tests of exp and exp10. Do not
mark underflow exceptions as possibly missing for bug 16361.
* math/auto-libm-test-out: Regenerated.
2015-06-19 Joseph Myers <joseph@codesourcery.com>
* conform/data/sys/select.h-data [XOPEN2K8] (pselect): Expect.

28
NEWS
View File

@ -10,20 +10,20 @@ Version 2.22
* The following bugs are resolved with this release:
438, 4719, 6792, 13028, 13064, 14094, 14841, 14906, 14958, 15319, 15467,
15790, 15969, 16159, 16339, 16350, 16351, 16352, 16512, 16560, 16704,
16783, 16850, 17053, 17090, 17195, 17269, 17293, 17322, 17523, 17542,
17569, 17581, 17588, 17596, 17620, 17621, 17628, 17631, 17692, 17711,
17715, 17776, 17779, 17792, 17836, 17912, 17916, 17930, 17932, 17944,
17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17998,
17999, 18007, 18019, 18020, 18029, 18030, 18032, 18034, 18036, 18038,
18039, 18042, 18043, 18046, 18047, 18049, 18068, 18080, 18093, 18100,
18104, 18110, 18111, 18116, 18125, 18128, 18138, 18185, 18196, 18197,
18206, 18210, 18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287,
18319, 18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422,
18434, 18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497,
18498, 18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529, 18530,
18532, 18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545, 18546,
18547, 18553, 18558.
15790, 15969, 16159, 16339, 16350, 16351, 16352, 16361, 16512, 16560,
16704, 16783, 16850, 17053, 17090, 17195, 17269, 17293, 17322, 17523,
17542, 17569, 17581, 17588, 17596, 17620, 17621, 17628, 17631, 17692,
17711, 17715, 17776, 17779, 17792, 17836, 17912, 17916, 17930, 17932,
17944, 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996,
17998, 17999, 18007, 18019, 18020, 18029, 18030, 18032, 18034, 18036,
18038, 18039, 18042, 18043, 18046, 18047, 18049, 18068, 18080, 18093,
18100, 18104, 18110, 18111, 18116, 18125, 18128, 18138, 18185, 18196,
18197, 18206, 18210, 18211, 18217, 18220, 18221, 18234, 18244, 18247,
18287, 18319, 18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418,
18422, 18434, 18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496,
18497, 18498, 18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529,
18530, 18532, 18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545,
18546, 18547, 18553, 18558.
* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.

View File

@ -1191,6 +1191,7 @@ exp -7.4444006192138124e+02
exp -0x1.75f113c30b1c8p+9
exp -max
exp -11342.8125
exp -0x2.c5b2319c4843acc0p12
exp 0x1p-10
exp -0x1p-10
exp 0x1p-20
@ -1223,8 +1224,8 @@ exp10 305
exp10 -305
# GCC bug 59666: results on directed rounding may be incorrect.
exp10 4932 xfail-rounding:ldbl-128ibm
# Bug 16361: underflow exception may be misssing
exp10 -4932 missing-underflow:ldbl-96-intel:x86 missing-underflow:ldbl-96-intel:x86_64
exp10 -4932
exp10 -0x1.343793004f503232p12
# GCC bug 59666: results on directed rounding may be incorrect.
exp10 1e5 xfail-rounding:ldbl-128ibm
exp10 -1e5

View File

@ -103944,6 +103944,111 @@ exp -11342.8125
= exp tonearest ldbl-128ibm -0x2.c4edp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.c4edp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.c4edp+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
exp -0x2.c5b2319c4843acc0p12
= exp downward flt-32 -0x2.c5b23p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp tonearest flt-32 -0x2.c5b23p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp towardzero flt-32 -0x2.c5b23p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp upward flt-32 -0x2.c5b23p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.c5b23p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp tonearest dbl-64 -0x2.c5b23p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp towardzero dbl-64 -0x2.c5b23p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp upward dbl-64 -0x2.c5b23p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.c5b23p+12L : 0x4.00671741091b8c2p-16384L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.c5b23p+12L : 0x4.00671741091b8c28p-16384L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.c5b23p+12L : 0x4.00671741091b8c2p-16384L : inexact-ok
= exp upward ldbl-96-intel -0x2.c5b23p+12L : 0x4.00671741091b8c28p-16384L : inexact-ok
= exp downward ldbl-96-m68k -0x2.c5b23p+12L : 0x4.00671741091b8c2p-16384L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.c5b23p+12L : 0x4.00671741091b8c28p-16384L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.c5b23p+12L : 0x4.00671741091b8c2p-16384L : inexact-ok
= exp upward ldbl-96-m68k -0x2.c5b23p+12L : 0x4.00671741091b8c28p-16384L : inexact-ok
= exp downward ldbl-128 -0x2.c5b23p+12L : 0x4.00671741091b8c27d0a36c181058p-16384L : inexact-ok
= exp tonearest ldbl-128 -0x2.c5b23p+12L : 0x4.00671741091b8c27d0a36c18105cp-16384L : inexact-ok
= exp towardzero ldbl-128 -0x2.c5b23p+12L : 0x4.00671741091b8c27d0a36c181058p-16384L : inexact-ok
= exp upward ldbl-128 -0x2.c5b23p+12L : 0x4.00671741091b8c27d0a36c18105cp-16384L : inexact-ok
= exp downward ldbl-128ibm -0x2.c5b23p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.c5b23p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.c5b23p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.c5b23p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp downward flt-32 -0x2.c5b234p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp tonearest flt-32 -0x2.c5b234p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp towardzero flt-32 -0x2.c5b234p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp upward flt-32 -0x2.c5b234p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.c5b234p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp tonearest dbl-64 -0x2.c5b234p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp towardzero dbl-64 -0x2.c5b234p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp upward dbl-64 -0x2.c5b234p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.c5b234p+12L : 0x3.ff671d7bc6ce9588p-16384L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-96-intel -0x2.c5b234p+12L : 0x3.ff671d7bc6ce9588p-16384L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-96-intel -0x2.c5b234p+12L : 0x3.ff671d7bc6ce9588p-16384L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-96-intel -0x2.c5b234p+12L : 0x3.ff671d7bc6ce959p-16384L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-m68k -0x2.c5b234p+12L : 0x3.ff671d7bc6ce9588p-16384L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.c5b234p+12L : 0x3.ff671d7bc6ce958cp-16384L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.c5b234p+12L : 0x3.ff671d7bc6ce9588p-16384L : inexact-ok
= exp upward ldbl-96-m68k -0x2.c5b234p+12L : 0x3.ff671d7bc6ce958cp-16384L : inexact-ok
= exp downward ldbl-128 -0x2.c5b234p+12L : 0x3.ff671d7bc6ce958ba803f3e779bp-16384L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128 -0x2.c5b234p+12L : 0x3.ff671d7bc6ce958ba803f3e779bp-16384L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128 -0x2.c5b234p+12L : 0x3.ff671d7bc6ce958ba803f3e779bp-16384L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128 -0x2.c5b234p+12L : 0x3.ff671d7bc6ce958ba803f3e779b4p-16384L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-128ibm -0x2.c5b234p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.c5b234p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.c5b234p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.c5b234p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.c5b2319c4843ap+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp tonearest dbl-64 -0x2.c5b2319c4843ap+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp towardzero dbl-64 -0x2.c5b2319c4843ap+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp upward dbl-64 -0x2.c5b2319c4843ap+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc8p-16384L : inexact-ok
= exp tonearest ldbl-96-intel -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc88p-16384L : inexact-ok
= exp towardzero ldbl-96-intel -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc8p-16384L : inexact-ok
= exp upward ldbl-96-intel -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc88p-16384L : inexact-ok
= exp downward ldbl-96-m68k -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc8p-16384L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc88p-16384L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc8p-16384L : inexact-ok
= exp upward ldbl-96-m68k -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc88p-16384L : inexact-ok
= exp downward ldbl-128 -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc85647bac501164p-16384L : inexact-ok
= exp tonearest ldbl-128 -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc85647bac501164p-16384L : inexact-ok
= exp towardzero ldbl-128 -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc85647bac501164p-16384L : inexact-ok
= exp upward ldbl-128 -0x2.c5b2319c4843ap+12L : 0x4.00000000032ffc85647bac501168p-16384L : inexact-ok
= exp downward ldbl-128ibm -0x2.c5b2319c4843ap+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.c5b2319c4843ap+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.c5b2319c4843ap+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.c5b2319c4843ap+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp downward dbl-64 -0x2.c5b2319c4843cp+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp tonearest dbl-64 -0x2.c5b2319c4843cp+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp towardzero dbl-64 -0x2.c5b2319c4843cp+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp upward dbl-64 -0x2.c5b2319c4843cp+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc8p-16384L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-96-intel -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc88p-16384L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-96-intel -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc8p-16384L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-96-intel -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc88p-16384L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-m68k -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc84p-16384L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc84p-16384L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc84p-16384L : inexact-ok
= exp upward ldbl-96-m68k -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc88p-16384L : inexact-ok
= exp downward ldbl-128 -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc85647d4c57069cp-16384L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128 -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc85647d4c57069cp-16384L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128 -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc85647d4c57069cp-16384L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128 -0x2.c5b2319c4843cp+12L : 0x3.fffffffffb2ffc85647d4c5706ap-16384L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-128ibm -0x2.c5b2319c4843cp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.c5b2319c4843cp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.c5b2319c4843cp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.c5b2319c4843cp+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-intel -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc8p-16384L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-96-intel -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc88p-16384L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-96-intel -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc8p-16384L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-96-intel -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc88p-16384L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-96-m68k -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc84p-16384L : inexact-ok
= exp tonearest ldbl-96-m68k -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc84p-16384L : inexact-ok
= exp towardzero ldbl-96-m68k -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc84p-16384L : inexact-ok
= exp upward ldbl-96-m68k -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc88p-16384L : inexact-ok
= exp downward ldbl-128 -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc85647a6732d718p-16384L : inexact-ok underflow errno-erange-ok
= exp tonearest ldbl-128 -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc85647a6732d718p-16384L : inexact-ok underflow errno-erange-ok
= exp towardzero ldbl-128 -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc85647a6732d718p-16384L : inexact-ok underflow errno-erange-ok
= exp upward ldbl-128 -0x2.c5b2319c4843accp+12L : 0x3.fffffffffffffc85647a6732d71cp-16384L : inexact-ok underflow errno-erange-ok
= exp downward ldbl-128ibm -0x2.c5b2319c4843accp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp tonearest ldbl-128ibm -0x2.c5b2319c4843accp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp towardzero ldbl-128ibm -0x2.c5b2319c4843accp+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp upward ldbl-128ibm -0x2.c5b2319c4843accp+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
exp 0x1p-10
= exp downward flt-32 0x4p-12f : 0x1.004008p+0f : inexact-ok
= exp tonearest flt-32 0x4p-12f : 0x1.004008p+0f : inexact-ok
@ -104929,31 +105034,136 @@ exp10 4932 xfail-rounding:ldbl-128ibm
= exp10 tonearest ldbl-128ibm 0x1.344p+12L : plus_infty : inexact-ok overflow errno-erange
= exp10 towardzero ldbl-128ibm 0x1.344p+12L : 0xf.ffffffffffffbffffffffffffcp+1020L : xfail:ldbl-128ibm inexact-ok overflow errno-erange-ok
= exp10 upward ldbl-128ibm 0x1.344p+12L : plus_infty : xfail:ldbl-128ibm inexact-ok overflow errno-erange
exp10 -4932 missing-underflow:ldbl-96-intel:x86 missing-underflow:ldbl-96-intel:x86_64
= exp10 downward flt-32 -0x1.344p+12f : 0x0p+0f : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 tonearest flt-32 -0x1.344p+12f : 0x0p+0f : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 towardzero flt-32 -0x1.344p+12f : 0x0p+0f : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 upward flt-32 -0x1.344p+12f : 0x8p-152f : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 downward dbl-64 -0x1.344p+12 : 0x0p+0 : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 tonearest dbl-64 -0x1.344p+12 : 0x0p+0 : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 towardzero dbl-64 -0x1.344p+12 : 0x0p+0 : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 upward dbl-64 -0x1.344p+12 : 0x4p-1076 : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 downward ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 tonearest ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 towardzero ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 upward ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf88p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 downward ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 tonearest ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 towardzero ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 upward ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf84p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 downward ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc00cp-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 tonearest ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc01p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 towardzero ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc00cp-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 upward ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc01p-16384L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
= exp10 downward ldbl-128ibm -0x1.344p+12L : 0x0p+0L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 tonearest ldbl-128ibm -0x1.344p+12L : 0x0p+0L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 towardzero ldbl-128ibm -0x1.344p+12L : 0x0p+0L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange
= exp10 upward ldbl-128ibm -0x1.344p+12L : 0x4p-1076L : inexact-ok underflow underflow-ok:ldbl-96-intel:x86 underflow-ok:ldbl-96-intel:x86_64 errno-erange-ok
exp10 -4932
= exp10 downward flt-32 -0x1.344p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 tonearest flt-32 -0x1.344p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 towardzero flt-32 -0x1.344p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 upward flt-32 -0x1.344p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp10 downward dbl-64 -0x1.344p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 tonearest dbl-64 -0x1.344p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 towardzero dbl-64 -0x1.344p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 upward dbl-64 -0x1.344p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-96-intel -0x1.344p+12L : 0x1.30923e47949abf88p-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-96-m68k -0x1.344p+12L : 0x1.30923e47949abf84p-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc00cp-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc01p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc00cp-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-128 -0x1.344p+12L : 0x1.30923e47949abf816b7d38ebc01p-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-128ibm -0x1.344p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 tonearest ldbl-128ibm -0x1.344p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 towardzero ldbl-128ibm -0x1.344p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 upward ldbl-128ibm -0x1.344p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
exp10 -0x1.343793004f503232p12
= exp10 downward flt-32 -0x1.343792p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 tonearest flt-32 -0x1.343792p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 towardzero flt-32 -0x1.343792p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 upward flt-32 -0x1.343792p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp10 downward dbl-64 -0x1.343792p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 tonearest dbl-64 -0x1.343792p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 towardzero dbl-64 -0x1.343792p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 upward dbl-64 -0x1.343792p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-intel -0x1.343792p+12L : 0x4.009395d78ebc9b6p-16384L : inexact-ok
= exp10 tonearest ldbl-96-intel -0x1.343792p+12L : 0x4.009395d78ebc9b68p-16384L : inexact-ok
= exp10 towardzero ldbl-96-intel -0x1.343792p+12L : 0x4.009395d78ebc9b6p-16384L : inexact-ok
= exp10 upward ldbl-96-intel -0x1.343792p+12L : 0x4.009395d78ebc9b68p-16384L : inexact-ok
= exp10 downward ldbl-96-m68k -0x1.343792p+12L : 0x4.009395d78ebc9b6p-16384L : inexact-ok
= exp10 tonearest ldbl-96-m68k -0x1.343792p+12L : 0x4.009395d78ebc9b68p-16384L : inexact-ok
= exp10 towardzero ldbl-96-m68k -0x1.343792p+12L : 0x4.009395d78ebc9b6p-16384L : inexact-ok
= exp10 upward ldbl-96-m68k -0x1.343792p+12L : 0x4.009395d78ebc9b68p-16384L : inexact-ok
= exp10 downward ldbl-128 -0x1.343792p+12L : 0x4.009395d78ebc9b64a0aa93fc93dp-16384L : inexact-ok
= exp10 tonearest ldbl-128 -0x1.343792p+12L : 0x4.009395d78ebc9b64a0aa93fc93dp-16384L : inexact-ok
= exp10 towardzero ldbl-128 -0x1.343792p+12L : 0x4.009395d78ebc9b64a0aa93fc93dp-16384L : inexact-ok
= exp10 upward ldbl-128 -0x1.343792p+12L : 0x4.009395d78ebc9b64a0aa93fc93d4p-16384L : inexact-ok
= exp10 downward ldbl-128ibm -0x1.343792p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 tonearest ldbl-128ibm -0x1.343792p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 towardzero ldbl-128ibm -0x1.343792p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 upward ldbl-128ibm -0x1.343792p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp10 downward flt-32 -0x1.343794p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 tonearest flt-32 -0x1.343794p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 towardzero flt-32 -0x1.343794p+12f : 0x0p+0f : inexact-ok underflow errno-erange
= exp10 upward flt-32 -0x1.343794p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
= exp10 downward dbl-64 -0x1.343794p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 tonearest dbl-64 -0x1.343794p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 towardzero dbl-64 -0x1.343794p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 upward dbl-64 -0x1.343794p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-intel -0x1.343794p+12L : 0x3.ff6cdaadaae05f18p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-96-intel -0x1.343794p+12L : 0x3.ff6cdaadaae05f2p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-96-intel -0x1.343794p+12L : 0x3.ff6cdaadaae05f18p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-96-intel -0x1.343794p+12L : 0x3.ff6cdaadaae05f2p-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-m68k -0x1.343794p+12L : 0x3.ff6cdaadaae05f1cp-16384L : inexact-ok
= exp10 tonearest ldbl-96-m68k -0x1.343794p+12L : 0x3.ff6cdaadaae05f1cp-16384L : inexact-ok
= exp10 towardzero ldbl-96-m68k -0x1.343794p+12L : 0x3.ff6cdaadaae05f1cp-16384L : inexact-ok
= exp10 upward ldbl-96-m68k -0x1.343794p+12L : 0x3.ff6cdaadaae05f2p-16384L : inexact-ok
= exp10 downward ldbl-128 -0x1.343794p+12L : 0x3.ff6cdaadaae05f1d9410e8bb22f8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-128 -0x1.343794p+12L : 0x3.ff6cdaadaae05f1d9410e8bb22f8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-128 -0x1.343794p+12L : 0x3.ff6cdaadaae05f1d9410e8bb22f8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-128 -0x1.343794p+12L : 0x3.ff6cdaadaae05f1d9410e8bb22fcp-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-128ibm -0x1.343794p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 tonearest ldbl-128ibm -0x1.343794p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 towardzero ldbl-128ibm -0x1.343794p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 upward ldbl-128ibm -0x1.343794p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp10 downward dbl-64 -0x1.343793004f503p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 tonearest dbl-64 -0x1.343793004f503p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 towardzero dbl-64 -0x1.343793004f503p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 upward dbl-64 -0x1.343793004f503p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-intel -0x1.343793004f503p+12L : 0x4.0000000001434f48p-16384L : inexact-ok
= exp10 tonearest ldbl-96-intel -0x1.343793004f503p+12L : 0x4.0000000001434f5p-16384L : inexact-ok
= exp10 towardzero ldbl-96-intel -0x1.343793004f503p+12L : 0x4.0000000001434f48p-16384L : inexact-ok
= exp10 upward ldbl-96-intel -0x1.343793004f503p+12L : 0x4.0000000001434f5p-16384L : inexact-ok
= exp10 downward ldbl-96-m68k -0x1.343793004f503p+12L : 0x4.0000000001434f48p-16384L : inexact-ok
= exp10 tonearest ldbl-96-m68k -0x1.343793004f503p+12L : 0x4.0000000001434f5p-16384L : inexact-ok
= exp10 towardzero ldbl-96-m68k -0x1.343793004f503p+12L : 0x4.0000000001434f48p-16384L : inexact-ok
= exp10 upward ldbl-96-m68k -0x1.343793004f503p+12L : 0x4.0000000001434f5p-16384L : inexact-ok
= exp10 downward ldbl-128 -0x1.343793004f503p+12L : 0x4.0000000001434f4e77c5e6c4ab4cp-16384L : inexact-ok
= exp10 tonearest ldbl-128 -0x1.343793004f503p+12L : 0x4.0000000001434f4e77c5e6c4ab5p-16384L : inexact-ok
= exp10 towardzero ldbl-128 -0x1.343793004f503p+12L : 0x4.0000000001434f4e77c5e6c4ab4cp-16384L : inexact-ok
= exp10 upward ldbl-128 -0x1.343793004f503p+12L : 0x4.0000000001434f4e77c5e6c4ab5p-16384L : inexact-ok
= exp10 downward ldbl-128ibm -0x1.343793004f503p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 tonearest ldbl-128ibm -0x1.343793004f503p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 towardzero ldbl-128ibm -0x1.343793004f503p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 upward ldbl-128ibm -0x1.343793004f503p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp10 downward dbl-64 -0x1.343793004f504p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 tonearest dbl-64 -0x1.343793004f504p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 towardzero dbl-64 -0x1.343793004f504p+12 : 0x0p+0 : inexact-ok underflow errno-erange
= exp10 upward dbl-64 -0x1.343793004f504p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-intel -0x1.343793004f504p+12L : 0x3.fffffffff80d767p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-96-intel -0x1.343793004f504p+12L : 0x3.fffffffff80d767p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-96-intel -0x1.343793004f504p+12L : 0x3.fffffffff80d767p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-96-intel -0x1.343793004f504p+12L : 0x3.fffffffff80d7678p-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-m68k -0x1.343793004f504p+12L : 0x3.fffffffff80d767p-16384L : inexact-ok
= exp10 tonearest ldbl-96-m68k -0x1.343793004f504p+12L : 0x3.fffffffff80d767p-16384L : inexact-ok
= exp10 towardzero ldbl-96-m68k -0x1.343793004f504p+12L : 0x3.fffffffff80d767p-16384L : inexact-ok
= exp10 upward ldbl-96-m68k -0x1.343793004f504p+12L : 0x3.fffffffff80d7674p-16384L : inexact-ok
= exp10 downward ldbl-128 -0x1.343793004f504p+12L : 0x3.fffffffff80d76709d230e22dc24p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-128 -0x1.343793004f504p+12L : 0x3.fffffffff80d76709d230e22dc24p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-128 -0x1.343793004f504p+12L : 0x3.fffffffff80d76709d230e22dc24p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-128 -0x1.343793004f504p+12L : 0x3.fffffffff80d76709d230e22dc28p-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-128ibm -0x1.343793004f504p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 tonearest ldbl-128ibm -0x1.343793004f504p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 towardzero ldbl-128ibm -0x1.343793004f504p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 upward ldbl-128ibm -0x1.343793004f504p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-intel -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbe8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-96-intel -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbfp-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-96-intel -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbe8p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-96-intel -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbfp-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-96-m68k -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbecp-16384L : inexact-ok
= exp10 tonearest ldbl-96-m68k -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbecp-16384L : inexact-ok
= exp10 towardzero ldbl-96-m68k -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbecp-16384L : inexact-ok
= exp10 upward ldbl-96-m68k -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbfp-16384L : inexact-ok
= exp10 downward ldbl-128 -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbed07250d70bb4p-16384L : inexact-ok underflow errno-erange-ok
= exp10 tonearest ldbl-128 -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbed07250d70bb4p-16384L : inexact-ok underflow errno-erange-ok
= exp10 towardzero ldbl-128 -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbed07250d70bb4p-16384L : inexact-ok underflow errno-erange-ok
= exp10 upward ldbl-128 -0x1.343793004f503232p+12L : 0x3.ffffffffffffcbed07250d70bb44p-16384L : inexact-ok underflow errno-erange-ok
= exp10 downward ldbl-128ibm -0x1.343793004f503232p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 tonearest ldbl-128ibm -0x1.343793004f503232p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 towardzero ldbl-128ibm -0x1.343793004f503232p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp10 upward ldbl-128ibm -0x1.343793004f503232p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
exp10 1e5 xfail-rounding:ldbl-128ibm
= exp10 downward flt-32 0x1.86ap+16f : 0xf.fffffp+124f : xfail:ldbl-128ibm inexact-ok overflow errno-erange-ok
= exp10 tonearest flt-32 0x1.86ap+16f : plus_infty : inexact-ok overflow errno-erange

View File

@ -65,6 +65,10 @@ c1: .byte 0x20, 0xfa, 0xee, 0xc2, 0x5f, 0x70, 0xa5, 0xec, 0xed, 0x3f
csat: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x0e, 0x40
.byte 0, 0, 0, 0, 0, 0
ASM_SIZE_DIRECTIVE(csat)
.type cmin,@object
cmin: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x1, 0
.byte 0, 0, 0, 0, 0, 0
ASM_SIZE_DIRECTIVE(cmin)
#endif
#ifdef PIC
@ -189,8 +193,18 @@ ENTRY(IEEE754_EXPL)
fstp %st(1) /* 2 */
fscale /* 2 scale factor is st(1); base^x */
fstp %st(1) /* 1 */
/* Ensure underflow for tiny result. */
fldt MO(cmin) /* 2 cmin */
fld %st(1) /* 3 */
fcompp /* 1 */
fnstsw
sahf
jnc 6f
fld %st
fmul %st
fstp %st
#endif
fstp %st(1) /* 0 */
6: fstp %st(1) /* 0 */
jmp 2f
1:
#ifdef USE_AS_EXPM1L

View File

@ -65,6 +65,10 @@ c1: .byte 0x20, 0xfa, 0xee, 0xc2, 0x5f, 0x70, 0xa5, 0xec, 0xed, 0x3f
csat: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x0e, 0x40
.byte 0, 0, 0, 0, 0, 0
ASM_SIZE_DIRECTIVE(csat)
.type cmin,@object
cmin: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x1, 0
.byte 0, 0, 0, 0, 0, 0
ASM_SIZE_DIRECTIVE(cmin)
#endif
#ifdef PIC
@ -182,8 +186,17 @@ ENTRY(IEEE754_EXPL)
fstp %st(1) /* 2 */
fscale /* 2 scale factor is st(1); base^x */
fstp %st(1) /* 1 */
/* Ensure underflow for tiny result. */
fldt MO(cmin) /* 2 cmin */
fld %st(1) /* 3 */
fcomip %st(1), %st /* 2 */
fstp %st /* 1 */
jnc 6f
fld %st
fmul %st
fstp %st
#endif
fstp %st(1) /* 0 */
6: fstp %st(1) /* 0 */
jmp 2f
1:
#ifdef USE_AS_EXPM1L