@@ -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
@@ -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
@@ -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