diff --git a/test_common/harness/errorHelpers.cpp b/test_common/harness/errorHelpers.cpp index eaccf641..e45c3b6a 100644 --- a/test_common/harness/errorHelpers.cpp +++ b/test_common/harness/errorHelpers.cpp @@ -369,7 +369,7 @@ static float Ulp_Error_Half_Float(float test, double reference) return (float)scalbn(testVal - reference, ulp_exp); } -float Ulp_Error_Half(cl_half test, float reference) +float Ulp_Error_Half(cl_half test, double reference) { return Ulp_Error_Half_Float(cl_half_to_float(test), reference); } diff --git a/test_common/harness/errorHelpers.h b/test_common/harness/errorHelpers.h index 3f1d8fb1..e6d4620b 100644 --- a/test_common/harness/errorHelpers.h +++ b/test_common/harness/errorHelpers.h @@ -185,7 +185,7 @@ static int vlog_win32(const char *format, ...); extern const char *IGetErrorString(int clErrorCode); -extern float Ulp_Error_Half(cl_half test, float reference); +extern float Ulp_Error_Half(cl_half test, double reference); extern float Ulp_Error(float test, double reference); extern float Ulp_Error_Double(double test, long double reference); diff --git a/test_conformance/math_brute_force/ternary_half.cpp b/test_conformance/math_brute_force/ternary_half.cpp index ba6dd4d4..5c9fd87c 100644 --- a/test_conformance/math_brute_force/ternary_half.cpp +++ b/test_conformance/math_brute_force/ternary_half.cpp @@ -237,8 +237,8 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode) for (size_t j = 0; j < bufferElements; j++) { feclearexcept(FE_OVERFLOW); - res[j] = HFF((float)f->func.f_fma( - HTF(hp0[j]), HTF(hp1[j]), HTF(hp2[j]), CORRECTLY_ROUNDED)); + res[j] = HFD((double)f->dfunc.f_fff(HTF(hp0[j]), HTF(hp1[j]), + HTF(hp2[j]))); overflow[j] = FE_OVERFLOW == (FE_OVERFLOW & fetestexcept(FE_OVERFLOW)); } @@ -246,8 +246,8 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode) else { for (size_t j = 0; j < bufferElements; j++) - res[j] = HFF((float)f->func.f_fma( - HTF(hp0[j]), HTF(hp1[j]), HTF(hp2[j]), CORRECTLY_ROUNDED)); + res[j] = HFD((double)f->dfunc.f_fff(HTF(hp0[j]), HTF(hp1[j]), + HTF(hp2[j]))); } // Read the data back @@ -277,9 +277,9 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode) { int fail; cl_half test = ((cl_half *)q)[j]; - float ref1 = f->func.f_fma(HTF(hp0[j]), HTF(hp1[j]), - HTF(hp2[j]), CORRECTLY_ROUNDED); - cl_half correct = HFF(ref1); + double ref1 = (double)f->dfunc.f_fff( + HTF(hp0[j]), HTF(hp1[j]), HTF(hp2[j])); + cl_half correct = HFD(ref1); // Per section 10 paragraph 6, accept any result if an input // or output is a infinity or NaN or overflow diff --git a/test_conformance/math_brute_force/utility.h b/test_conformance/math_brute_force/utility.h index 264fc7a4..2635800a 100644 --- a/test_conformance/math_brute_force/utility.h +++ b/test_conformance/math_brute_force/utility.h @@ -75,6 +75,7 @@ extern RoundingMode gFloatToHalfRoundingMode; extern cl_half_rounding_mode gHalfRoundingMode; #define HFF(num) cl_half_from_float(num, gHalfRoundingMode) +#define HFD(num) cl_half_from_double(num, gHalfRoundingMode) #define HTF(num) cl_half_to_float(num) #define LOWER_IS_BETTER 0