diff options
Diffstat (limited to 'sysdeps/x86_64')
-rw-r--r-- | sysdeps/x86_64/fpu/e_expl.S | 11 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/libm-test-ulps | 319 |
2 files changed, 330 insertions, 0 deletions
diff --git a/sysdeps/x86_64/fpu/e_expl.S b/sysdeps/x86_64/fpu/e_expl.S index a919780..1c21f03 100644 --- a/sysdeps/x86_64/fpu/e_expl.S +++ b/sysdeps/x86_64/fpu/e_expl.S @@ -127,9 +127,20 @@ ENTRY(IEEE754_EXPL) #endif 3: FLDLOG /* 1 log2(base) */ fmul %st(1), %st /* 1 x log2(base) */ +#ifdef USE_AS_EXPM1L + /* Set round-to-nearest temporarily. */ + fstcw -4(%rsp) + movl $0xf3ff, %edx + andl -4(%rsp), %edx + movl %edx, -8(%rsp) + fldcw -8(%rsp) +#endif frndint /* 1 i */ fld %st(1) /* 2 x */ frndint /* 2 xi */ +#ifdef USE_AS_EXPM1L + fldcw -4(%rsp) +#endif fld %st(1) /* 3 i */ fldt MO(c0) /* 4 c0 */ fld %st(2) /* 5 xi */ diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps index b45ce1d..89b4bc8 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -7011,9 +7011,15 @@ float: 1 ifloat: 1 # expm1 +Test "expm1 (-0x1p-64)": +ildouble: 1 +ldouble: 1 Test "expm1 (-0x2.dp+4)": ildouble: 1 ldouble: 1 +Test "expm1 (-0x4p-12)": +ildouble: 1 +ldouble: 1 Test "expm1 (-45.0)": ildouble: 1 ldouble: 1 @@ -7048,6 +7054,281 @@ Test "expm1 (500.0)": double: 1 idouble: 1 +# expm1_downward +Test "expm1_downward (-0x1p-100)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (-0x2.ep+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (-0x4.9p+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (-0x4.bp+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (-0x4p-4)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (-0x5p+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (-0x6.4p+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x1.f4p+8)": +double: 1 +idouble: 1 +Test "expm1_downward (0x1p+0)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x1p-100)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x1p-32)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x3.2p+4)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x4p-12)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x4p-52)": +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x7.fp+4)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_downward (0x8p-32)": +ildouble: 1 +ldouble: 1 + +# expm1_tonearest +Test "expm1_tonearest (-0x1p-64)": +ildouble: 1 +ldouble: 1 +Test "expm1_tonearest (-0x2.dp+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_tonearest (-0x4p-12)": +ildouble: 1 +ldouble: 1 +Test "expm1_tonearest (0x1.f4p+8)": +double: 1 +idouble: 1 +Test "expm1_tonearest (0x1p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_tonearest (0x2.c5c4p+12)": +ildouble: 1 +ldouble: 1 +Test "expm1_tonearest (0xcp-4)": +double: 1 +idouble: 1 + +# expm1_towardzero +Test "expm1_towardzero (-0x1.86ap+16)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x1p-100)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x1p-20)": +ildouble: 2 +ldouble: 2 +Test "expm1_towardzero (-0x1p-32)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x1p-64)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x2.71p+12)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x2.dp+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x3.e8p+8)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x4.ap+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x4.ep+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x4.fp+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x4p-12)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x4p-52)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "expm1_towardzero (-0x8p-32)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0xf.ffffffffffff8p+1020)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0xf.fffffffffffffffp+16380)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0xf.fffffp+124)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x1.f4p+8)": +double: 1 +idouble: 1 +Test "expm1_towardzero (0x1p+0)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x1p-100)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x1p-32)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x3.2p+4)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x4p-12)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x4p-52)": +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x7.fp+4)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (0x8p-32)": +ildouble: 1 +ldouble: 1 + +# expm1_upward +Test "expm1_upward (-0x1.86ap+16)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x1p-100)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x1p-20)": +ildouble: 2 +ldouble: 2 +Test "expm1_upward (-0x1p-32)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x1p-64)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x2.71p+12)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x2.dp+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x3.e8p+8)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x4.ap+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x4.ep+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x4.fp+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x4p-12)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x4p-52)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "expm1_upward (-0x8p-32)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0xf.ffffffffffff8p+1020)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0xf.fffffffffffffffp+16380)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0xf.fffffp+124)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (0x1.f4p+8)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (0x1p-100)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "expm1_upward (0x1p-32)": +float: 1 +ifloat: 1 +Test "expm1_upward (0x1p-64)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "expm1_upward (0x4p-4)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (0x4p-52)": +float: 1 +ifloat: 1 +Test "expm1_upward (0x8p-32)": +float: 1 +ifloat: 1 + # gamma Test "gamma (-0.5)": ildouble: 1 @@ -8864,6 +9145,9 @@ ldouble: 1 Test "sinh_downward (0x1.8p+4)": ildouble: 1 ldouble: 1 +Test "sinh_downward (0x8p-32)": +ildouble: 1 +ldouble: 1 Test "sinh_downward (22)": float: 1 ifloat: 1 @@ -8894,6 +9178,9 @@ ldouble: 1 Test "sinh_towardzero (0x1.8p+4)": ildouble: 1 ldouble: 1 +Test "sinh_towardzero (0x8p-32)": +ildouble: 1 +ldouble: 1 Test "sinh_towardzero (22)": float: 1 ifloat: 1 @@ -12014,6 +12301,38 @@ ifloat: 1 ildouble: 1 ldouble: 1 +Function: "expm1_downward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "expm1_tonearest": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "expm1_towardzero": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 + +Function: "expm1_upward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 + Function: "gamma": double: 1 float: 2 |