Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Determinism] Add deterministic functions #216

Merged
merged 3 commits into from
Aug 29, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 46 additions & 46 deletions Configure.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,17 @@ if((CMAKE_SYSTEM_PROCESSOR MATCHES "x86") OR (CMAKE_SYSTEM_PROCESSOR MATCHES "AM
PUREC_SCALAR
PURECFMA_SCALAR
)
command_arguments(HEADER_PARAMS_SSE_ 2 4 __m128d __m128 __m128i __m128i __SSE2__)
command_arguments(HEADER_PARAMS_SSE2 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse2)
command_arguments(HEADER_PARAMS_SSE4 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse4)
command_arguments(HEADER_PARAMS_AVX_ 4 8 __m256d __m256 __m128i "struct { __m128i x, y$<SEMICOLON> }" __AVX__)
command_arguments(HEADER_PARAMS_AVX 4 8 __m256d __m256 __m128i "struct { __m128i x, y$<SEMICOLON> }" __AVX__ avx)
command_arguments(HEADER_PARAMS_FMA4 4 8 __m256d __m256 __m128i "struct { __m128i x, y$<SEMICOLON> }" __AVX__ fma4)
command_arguments(HEADER_PARAMS_AVX2 4 8 __m256d __m256 __m128i __m256i __AVX__ avx2)
command_arguments(HEADER_PARAMS_AVX2128 2 4 __m128d __m128 __m128i __m128i __SSE2__ avx2128)
command_arguments(HEADER_PARAMS_AVX512F_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__)
command_arguments(HEADER_PARAMS_AVX512F 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512f)
command_arguments(HEADER_PARAMS_AVX512FNOFMA 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512fnofma)
command_arguments(HEADER_PARAMS_SSE_ cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__)
command_arguments(HEADER_PARAMS_SSE2 cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse2)
command_arguments(HEADER_PARAMS_SSE4 cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse4)
command_arguments(HEADER_PARAMS_AVX_ cinz_ 4 8 __m256d __m256 __m128i "struct { __m128i x, y$<SEMICOLON> }" __AVX__)
command_arguments(HEADER_PARAMS_AVX cinz_ 4 8 __m256d __m256 __m128i "struct { __m128i x, y$<SEMICOLON> }" __AVX__ avx)
command_arguments(HEADER_PARAMS_FMA4 finz_ 4 8 __m256d __m256 __m128i "struct { __m128i x, y$<SEMICOLON> }" __AVX__ fma4)
command_arguments(HEADER_PARAMS_AVX2 finz_ 4 8 __m256d __m256 __m128i __m256i __AVX__ avx2)
command_arguments(HEADER_PARAMS_AVX2128 finz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ avx2128)
command_arguments(HEADER_PARAMS_AVX512F_ finz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__)
command_arguments(HEADER_PARAMS_AVX512F finz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512f)
command_arguments(HEADER_PARAMS_AVX512FNOFMA cinz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512fnofma)

command_arguments(ALIAS_PARAMS_AVX512F_DP 8 __m512d __m256i e avx512f)
command_arguments(ALIAS_PARAMS_AVX512F_SP -16 __m512 __m512i e avx512f)
Expand All @@ -103,11 +103,11 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
PUREC_SCALAR
PURECFMA_SCALAR
)
command_arguments(HEADER_PARAMS_ADVSIMD_ 2 4 float64x2_t float32x4_t int32x2_t int32x4_t __ARM_NEON)
command_arguments(HEADER_PARAMS_ADVSIMD 2 4 float64x2_t float32x4_t int32x2_t int32x4_t __ARM_NEON advsimd)
command_arguments(HEADER_PARAMS_ADVSIMDNOFMA 2 4 float64x2_t float32x4_t int32x2_t int32x4_t __ARM_NEON advsimdnofma)
command_arguments(HEADER_PARAMS_SVE x x svfloat64_t svfloat32_t svint32_t svint32_t __ARM_FEATURE_SVE sve)
command_arguments(HEADER_PARAMS_SVENOFMA x x svfloat64_t svfloat32_t svint32_t svint32_t __ARM_FEATURE_SVE svenofma)
command_arguments(HEADER_PARAMS_ADVSIMD_ finz_ 2 4 float64x2_t float32x4_t int32x2_t int32x4_t __ARM_NEON)
command_arguments(HEADER_PARAMS_ADVSIMD finz_ 2 4 float64x2_t float32x4_t int32x2_t int32x4_t __ARM_NEON advsimd)
command_arguments(HEADER_PARAMS_ADVSIMDNOFMA cinz_ 2 4 float64x2_t float32x4_t int32x2_t int32x4_t __ARM_NEON advsimdnofma)
command_arguments(HEADER_PARAMS_SVE finz_ x x svfloat64_t svfloat32_t svint32_t svint32_t __ARM_FEATURE_SVE sve)
command_arguments(HEADER_PARAMS_SVENOFMA cinz_ x x svfloat64_t svfloat32_t svint32_t svint32_t __ARM_FEATURE_SVE svenofma)

command_arguments(ALIAS_PARAMS_ADVSIMD_DP 2 float64x2_t int32x2_t n advsimd)
command_arguments(ALIAS_PARAMS_ADVSIMD_SP -4 float32x4_t int32x4_t n advsimd)
Expand All @@ -125,9 +125,9 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
PUREC_SCALAR
PURECFMA_SCALAR
)
command_arguments(HEADER_PARAMS_NEON32_ 2 4 - float32x4_t int32x2_t int32x4_t __ARM_NEON__)
command_arguments(HEADER_PARAMS_NEON32 2 4 - float32x4_t int32x2_t int32x4_t __ARM_NEON__ neon)
command_arguments(HEADER_PARAMS_NEON32VFPV4 2 4 - float32x4_t int32x2_t int32x4_t __ARM_NEON__ neonvfpv4)
command_arguments(HEADER_PARAMS_NEON32_ cinz_ 2 4 - float32x4_t int32x2_t int32x4_t __ARM_NEON__)
command_arguments(HEADER_PARAMS_NEON32 cinz_ 2 4 - float32x4_t int32x2_t int32x4_t __ARM_NEON__ neon)
command_arguments(HEADER_PARAMS_NEON32VFPV4 finz_ 2 4 - float32x4_t int32x2_t int32x4_t __ARM_NEON__ neonvfpv4)

command_arguments(ALIAS_PARAMS_NEON32_SP -4 float32x4_t int32x4_t - neon)
command_arguments(ALIAS_PARAMS_NEON32_DP 0)
Expand All @@ -144,47 +144,47 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
PURECFMA_SCALAR
)

set(HEADER_PARAMS_VSX 2 4 "vector double" "vector float" "vector int" "vector int" __VSX__ vsx)
set(HEADER_PARAMS_VSX_ 2 4 "vector double" "vector float" "vector int" "vector int" __VSX__ vsx)
set(HEADER_PARAMS_VSXNOFMA 2 4 "vector double" "vector float" "vector int" "vector int" __VSX__ vsxnofma)
set(HEADER_PARAMS_VSX finz_ 2 4 "vector double" "vector float" "vector int" "vector int" __VSX__ vsx)
set(HEADER_PARAMS_VSX_ finz_ 2 4 "vector double" "vector float" "vector int" "vector int" __VSX__ vsx)
set(HEADER_PARAMS_VSXNOFMA cinz_ 2 4 "vector double" "vector float" "vector int" "vector int" __VSX__ vsxnofma)
set(ALIAS_PARAMS_VSX_DP 2 "vector double" "vector int" - vsx)
set(ALIAS_PARAMS_VSX_SP -4 "vector float" "vector int" - vsx)

set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mvsx")
endif()

command_arguments(HEADER_PARAMS_PUREC_SCALAR 1 1 double float int32_t int32_t __STDC__ purec)
command_arguments(HEADER_PARAMS_PURECFMA_SCALAR 1 1 double float int32_t int32_t FP_FAST_FMA purecfma)
command_arguments(ALIAS_PARAMS_PUREC_SCALAR_DP 1 double int32_t purec)
command_arguments(ALIAS_PARAMS_PUREC_SCALAR_SP -1 float int32_t purec)
command_arguments(ALIAS_PARAMS_PURECFMA_SCALAR_DP 1 double int32_t purecfma)
command_arguments(ALIAS_PARAMS_PURECFMA_SCALAR_SP -1 float int32_t purecfma)
command_arguments(HEADER_PARAMS_PUREC_SCALAR cinz_ 1 1 double float int32_t int32_t __STDC__ purec)
command_arguments(HEADER_PARAMS_PURECFMA_SCALAR finz_ 1 1 double float int32_t int32_t FP_FAST_FMA purecfma)
command_arguments(ALIAS_PARAMS_PUREC_SCALAR_DP 1 double int32_t purec cinz_)
command_arguments(ALIAS_PARAMS_PUREC_SCALAR_SP -1 float int32_t purec cinz_)
command_arguments(ALIAS_PARAMS_PURECFMA_SCALAR_DP 1 double int32_t purecfma finz_)
command_arguments(ALIAS_PARAMS_PURECFMA_SCALAR_SP -1 float int32_t purecfma finz_)

set(COMPILER_SUPPORTS_PUREC_SCALAR 1)
set(COMPILER_SUPPORTS_PURECFMA_SCALAR 1)

# MKRename arguments per type
command_arguments(RENAME_PARAMS_SSE2 2 4 sse2)
command_arguments(RENAME_PARAMS_SSE4 2 4 sse4)
command_arguments(RENAME_PARAMS_AVX 4 8 avx)
command_arguments(RENAME_PARAMS_FMA4 4 8 fma4)
command_arguments(RENAME_PARAMS_AVX2 4 8 avx2)
command_arguments(RENAME_PARAMS_AVX2128 2 4 avx2128)
command_arguments(RENAME_PARAMS_AVX512F 8 16 avx512f)
command_arguments(RENAME_PARAMS_AVX512FNOFMA 8 16 avx512fnofma)
command_arguments(RENAME_PARAMS_ADVSIMD 2 4 advsimd)
command_arguments(RENAME_PARAMS_ADVSIMDNOFMA 2 4 advsimdnofma)
command_arguments(RENAME_PARAMS_NEON32 2 4 neon)
command_arguments(RENAME_PARAMS_NEON32VFPV4 2 4 neonvfpv4)
command_arguments(RENAME_PARAMS_VSX 2 4 vsx)
command_arguments(RENAME_PARAMS_VSXNOFMA 2 4 vsxnofma)
command_arguments(RENAME_PARAMS_PUREC_SCALAR 1 1 purec)
command_arguments(RENAME_PARAMS_PURECFMA_SCALAR 1 1 purecfma)
command_arguments(RENAME_PARAMS_SSE2 cinz_ 2 4 sse2)
command_arguments(RENAME_PARAMS_SSE4 cinz_ 2 4 sse4)
command_arguments(RENAME_PARAMS_AVX cinz_ 4 8 avx)
command_arguments(RENAME_PARAMS_FMA4 finz_ 4 8 fma4)
command_arguments(RENAME_PARAMS_AVX2 finz_ 4 8 avx2)
command_arguments(RENAME_PARAMS_AVX2128 finz_ 2 4 avx2128)
command_arguments(RENAME_PARAMS_AVX512F finz_ 8 16 avx512f)
command_arguments(RENAME_PARAMS_AVX512FNOFMA cinz_ 8 16 avx512fnofma)
command_arguments(RENAME_PARAMS_ADVSIMD finz_ 2 4 advsimd)
command_arguments(RENAME_PARAMS_ADVSIMDNOFMA cinz_ 2 4 advsimdnofma)
command_arguments(RENAME_PARAMS_NEON32 cinz_ 2 4 neon)
command_arguments(RENAME_PARAMS_NEON32VFPV4 finz_ 2 4 neonvfpv4)
command_arguments(RENAME_PARAMS_VSX finz_ 2 4 vsx)
command_arguments(RENAME_PARAMS_VSXNOFMA cinz_ 2 4 vsxnofma)
command_arguments(RENAME_PARAMS_PUREC_SCALAR cinz_ 1 1 purec)
command_arguments(RENAME_PARAMS_PURECFMA_SCALAR finz_ 1 1 purecfma)
# The vector length parameters in SVE, for SP and DP, are chosen for
# the smallest SVE vector size (128-bit). The name is generated using
# the "x" token of VLA SVE vector functions.
command_arguments(RENAME_PARAMS_SVE 2 4 sve)
command_arguments(RENAME_PARAMS_SVENOFMA x x svenofma)
command_arguments(RENAME_PARAMS_SVE finz_ x x sve)
command_arguments(RENAME_PARAMS_SVENOFMA cinz_ x x svenofma)

command_arguments(RENAME_PARAMS_GNUABI_SSE2 sse2 b 2 4 _mm128d _mm128 _mm128i _mm128i __SSE2__)
command_arguments(RENAME_PARAMS_GNUABI_AVX avx c 4 8 __m256d __m256 __m128i "struct { __m128i x, y$<SEMICOLON> }" __AVX__)
Expand Down
3 changes: 3 additions & 0 deletions src/common/misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,9 @@
#define ABS(x) ((x) < 0 ? -(x) : (x))
#endif

#define stringify(s) stringify_(s)
#define stringify_(s) #s

typedef long double longdouble;

#ifndef Sleef_double2_DEFINED
Expand Down
26 changes: 26 additions & 0 deletions src/libm-tester/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,20 @@ macro(test_extension SIMD)
add_test_iut(${TARGET_IUT${SIMD}})
list(APPEND IUT_LIST ${TARGET_IUT${SIMD}})

string(CONCAT IUTYNAME "iuty" ${LCSIMD})
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a comment in the source explaining the difference between iut and iuty

add_executable(${IUTYNAME} ${IUT_SRC})
target_compile_options(${IUTYNAME}
PRIVATE ${FLAGS_ENABLE_${SIMD}})
target_compile_definitions(${IUTYNAME}
PRIVATE ENABLE_${SIMD}=1 ${COMMON_TARGET_DEFINITIONS} DETERMINISTIC=1)
target_link_libraries(${IUTYNAME} ${TARGET_LIBSLEEF}
${LIBM} ${LIBRT})
add_dependencies(${IUTYNAME} ${TARGET_HEADERS})
add_dependencies(${IUTYNAME} ${TARGET_LIBSLEEF})
set_target_properties(${IUTYNAME} PROPERTIES C_STANDARD 99)
add_test_iut(${IUTYNAME})
list(APPEND IUT_LIST ${IUTYNAME})

if(LIB_MPFR AND NOT ${SIMD} STREQUAL NEON32 AND NOT ${SIMD} STREQUAL NEON32VFPV4 AND NOT MINGW)
# Build tester2 SIMD
string(TOLOWER ${SIMD} SCSIMD)
Expand All @@ -100,6 +114,18 @@ macro(test_extension SIMD)
if (MPFR_INCLUDE_DIR)
target_include_directories(${T} PRIVATE ${MPFR_INCLUDE_DIR})
endif()

set(T "tester2y${SCSIMD}${P}")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, make sure the distinction between the old tester2 and tester2y is clear

add_executable(${T} tester2simd${P}.c testerutil.c)
target_compile_options(${T} PRIVATE ${FLAGS_ENABLE_${SIMD}})
target_compile_definitions(${T} PRIVATE ENABLE_${SIMD}=1 USEMPFR=1 ${COMMON_TARGET_DEFINITIONS} DETERMINISTIC=1)
set_target_properties(${T} PROPERTIES C_STANDARD 99)
target_link_libraries(${T} ${TARGET_LIBSLEEF} ${LIB_MPFR} ${LIBM} ${LIBGMP})
add_dependencies(${T} ${TARGET_HEADERS})
add_dependencies(${T} ${TARGET_LIBSLEEF})
if (MPFR_INCLUDE_DIR)
target_include_directories(${T} PRIVATE ${MPFR_INCLUDE_DIR})
endif()
endforeach()
endif()
endif(COMPILER_SUPPORTS_${SIMD})
Expand Down
7 changes: 7 additions & 0 deletions src/libm-tester/iutsimd.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,9 @@ int do_test(int argc, char **argv) {
#elif defined(ENABLE_VECEXT)
if (vcast_f_vf(xpowf(vcast_vf_f(0.5f), vcast_vf_f(140))) == 0) k += 4;
#endif
#if defined(DETERMINISTIC)
k += 8;
#endif

printf("%d\n", k);
fflush(stdout);
Expand All @@ -480,9 +483,11 @@ int do_test(int argc, char **argv) {
func_d_d("log", xlog);
func_d_d("exp", xexp);

#ifndef DETERMINISTIC
func_d_d("sqrt", xsqrt);
func_d_d("sqrt_u05", xsqrt_u05);
func_d_d("sqrt_u35", xsqrt_u35);
#endif
func_d_d("cbrt", xcbrt);
func_d_d("cbrt_u1", xcbrt_u1);

Expand Down Expand Up @@ -562,9 +567,11 @@ int do_test(int argc, char **argv) {
func_f_f("logf", xlogf);
func_f_f("expf", xexpf);

#ifndef DETERMINISTIC
func_f_f("sqrtf", xsqrtf);
func_f_f("sqrtf_u05", xsqrtf_u05);
func_f_f("sqrtf_u35", xsqrtf_u35);
#endif
func_f_f("cbrtf", xcbrtf);
func_f_f("cbrtf_u1", xcbrtf_u1);

Expand Down
85 changes: 45 additions & 40 deletions src/libm-tester/tester.c
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ void showResult(int success) {
}
}

int enableDP = 0, enableSP = 0;
int enableDP = 0, enableSP = 0, deterministicMode = 0;

void do_test() {
mpfr_t frc, frt, frx, fry, frz;
Expand Down Expand Up @@ -2458,21 +2458,21 @@ void do_test() {
showResult(success);
}

{
if (!deterministicMode) {
fprintf(stderr, "sqrt denormal/nonnumber test : ");
double xa[] = { +0.0, -0.0, +1, -1, +1e+10, -1e+10, DBL_MAX, -DBL_MAX, DBL_MIN, -DBL_MIN, POSITIVE_INFINITY, NEGATIVE_INFINITY, NAN };
for(i=0;i<sizeof(xa)/sizeof(double) && success;i++) cmpDenorm_d(mpfr_sqrt, child_sqrt, xa[i]);
showResult(success);
}

{
if (!deterministicMode) {
fprintf(stderr, "sqrt_u05 denormal/nonnumber test : ");
double xa[] = { +0.0, -0.0, +1, -1, +1e+10, -1e+10, DBL_MAX, -DBL_MAX, DBL_MIN, -DBL_MIN, POSITIVE_INFINITY, NEGATIVE_INFINITY, NAN };
for(i=0;i<sizeof(xa)/sizeof(double) && success;i++) cmpDenorm_d(mpfr_sqrt, child_sqrt_u05, xa[i]);
showResult(success);
}

{
if (!deterministicMode) {
fprintf(stderr, "sqrt_u35 denormal/nonnumber test : ");
double xa[] = { +0.0, -0.0, +1, -1, +1e+10, -1e+10, DBL_MAX, -DBL_MAX, DBL_MIN, -DBL_MIN, POSITIVE_INFINITY, NEGATIVE_INFINITY, NAN };
for(i=0;i<sizeof(xa)/sizeof(double) && success;i++) cmpDenorm_d(mpfr_sqrt, child_sqrt_u35, xa[i]);
Expand Down Expand Up @@ -3027,21 +3027,21 @@ void do_test() {
showResult(success);
}

{
if (!deterministicMode) {
fprintf(stderr, "sqrtf denormal/nonnumber test : ");
float xa[] = { +0.0, -0.0, +1, -1, +1e+7, -1e+7, FLT_MAX, -FLT_MAX, FLT_MIN, -FLT_MIN, POSITIVE_INFINITYf, NEGATIVE_INFINITYf, NAN };
for(i=0;i<sizeof(xa)/sizeof(float) && success;i++) cmpDenorm_f(mpfr_sqrt, child_sqrtf, xa[i]);
showResult(success);
}

{
if (!deterministicMode) {
fprintf(stderr, "sqrtf_u05 denormal/nonnumber test : ");
float xa[] = { +0.0, -0.0, +1, -1, +1e+7, -1e+7, FLT_MAX, -FLT_MAX, FLT_MIN, -FLT_MIN, POSITIVE_INFINITYf, NEGATIVE_INFINITYf, NAN };
for(i=0;i<sizeof(xa)/sizeof(float) && success;i++) cmpDenorm_f(mpfr_sqrt, child_sqrtf_u05, xa[i]);
showResult(success);
}

{
if (!deterministicMode) {
fprintf(stderr, "sqrtf_u35 denormal/nonnumber test : ");
float xa[] = { +0.0, -0.0, +1, -1, +1e+7, -1e+7, FLT_MAX, -FLT_MAX, FLT_MIN, -FLT_MIN, POSITIVE_INFINITYf, NEGATIVE_INFINITYf, NAN };
for(i=0;i<sizeof(xa)/sizeof(float) && success;i++) cmpDenorm_f(mpfr_sqrt, child_sqrtf_u35, xa[i]);
Expand Down Expand Up @@ -3777,24 +3777,26 @@ void do_test() {

//

fprintf(stderr, "sqrt : ");
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_d(mpfr_sqrt, child_sqrt, d, 1.0);
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_d(mpfr_sqrt, child_sqrt, pow(2.1, d), 1.0);
showResult(success);
if (!deterministicMode) {
fprintf(stderr, "sqrt : ");
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_d(mpfr_sqrt, child_sqrt, d, 1.0);
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_d(mpfr_sqrt, child_sqrt, pow(2.1, d), 1.0);
showResult(success);

//
//

fprintf(stderr, "sqrt_u05 : ");
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_d(mpfr_sqrt, child_sqrt_u05, d, 0.506);
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_d(mpfr_sqrt, child_sqrt_u05, pow(2.1, d), 0.506);
showResult(success);
fprintf(stderr, "sqrt_u05 : ");
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_d(mpfr_sqrt, child_sqrt_u05, d, 0.506);
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_d(mpfr_sqrt, child_sqrt_u05, pow(2.1, d), 0.506);
showResult(success);

//
//

fprintf(stderr, "sqrt_u35 : ");
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_d(mpfr_sqrt, child_sqrt_u35, d, 3.5);
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_d(mpfr_sqrt, child_sqrt_u35, pow(2.1, d), 3.5);
showResult(success);
fprintf(stderr, "sqrt_u35 : ");
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_d(mpfr_sqrt, child_sqrt_u35, d, 3.5);
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_d(mpfr_sqrt, child_sqrt_u35, pow(2.1, d), 3.5);
showResult(success);
}

//

Expand Down Expand Up @@ -4537,30 +4539,32 @@ void do_test() {

//

fprintf(stderr, "sqrtf : ");
if (!enableFlushToZero) {
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_f(mpfr_sqrt, child_sqrtf, d, 1.0);
}
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_f(mpfr_sqrt, child_sqrtf, pow(2.1, d), 1.0);
showResult(success);
if (!deterministicMode) {
fprintf(stderr, "sqrtf : ");
if (!enableFlushToZero) {
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_f(mpfr_sqrt, child_sqrtf, d, 1.0);
}
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_f(mpfr_sqrt, child_sqrtf, pow(2.1, d), 1.0);
showResult(success);

//
//

fprintf(stderr, "sqrtf_u05 : ");
if (!enableFlushToZero) {
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u05, d, 0.506);
}
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u05, pow(2.1, d), 0.506);
showResult(success);
fprintf(stderr, "sqrtf_u05 : ");
if (!enableFlushToZero) {
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u05, d, 0.506);
}
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u05, pow(2.1, d), 0.506);
showResult(success);

//
//

fprintf(stderr, "sqrtf_u35 : ");
if (!enableFlushToZero) {
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u35, d, 3.5);
fprintf(stderr, "sqrtf_u35 : ");
if (!enableFlushToZero) {
for(d = -10000;d < 10000 && success;d += 2.1) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u35, d, 3.5);
}
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u35, pow(2.1, d), 3.5);
showResult(success);
}
for(i = -1000;i <= 1000 && success;i+=10) checkAccuracy_f(mpfr_sqrt, child_sqrtf_u35, pow(2.1, d), 3.5);
showResult(success);

//

Expand Down Expand Up @@ -4867,6 +4871,7 @@ int main(int argc, char **argv) {
enableDP = (u & 1) != 0;
enableSP = (u & 2) != 0;
enableFlushToZero |= ((u & 4) != 0);
deterministicMode |= ((u & 8) != 0);
}

if (enableFlushToZero) fprintf(stderr, "\n\n*** Flush to zero enabled\n");
Expand Down
2 changes: 2 additions & 0 deletions src/libm-tester/tester2simddp.c
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,7 @@ int main(int argc,char **argv)
}
}

#ifndef DETERMINISTIC
{
mpfr_set_d(frx, d, GMP_RNDN);
mpfr_sqrt(frx, frx, GMP_RNDN);
Expand Down Expand Up @@ -1010,6 +1011,7 @@ int main(int argc,char **argv)
fflush(stdout); ecnt++;
}
}
#endif // #ifndef DETERMINISTIC

{
mpfr_set_d(frx, d, GMP_RNDN);
Expand Down
Loading