From 1ad7e368cf9e1ac2f5256b70b20e1e46a06a92e0 Mon Sep 17 00:00:00 2001 From: Homer Hsing Date: Wed, 9 Oct 2013 16:14:48 +0800 Subject: [PATCH] fix isnan (builtin function) this patch passes following piglit test case piglit/framework/../bin/cl-program-tester generated_tests/cl/builtin/relational/builtin-float-isnan-1.0.generated.cl Signed-off-by: Homer Hsing Reviewed-by: "Yang, Rong R" --- backend/src/ocl_stdlib.tmpl.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h index 1982585..a4a1562 100644 --- a/backend/src/ocl_stdlib.tmpl.h +++ b/backend/src/ocl_stdlib.tmpl.h @@ -225,7 +225,11 @@ uchar INLINE_OVERLOADABLE convert_uchar_sat(float x) { INLINE_OVERLOADABLE int isfinite(float x) { return __builtin_isfinite(x); } INLINE_OVERLOADABLE int isinf(float x) { return __builtin_isinf(x); } -INLINE_OVERLOADABLE int isnan(float x) { return __builtin_isnan(x); } +INLINE_OVERLOADABLE int isnan(float x) { + union { uint u; float f; } u; + u.f = x; + return (u.u & 0x7FFFFFFF) > 0x7F800000; +} INLINE_OVERLOADABLE int isnormal(float x) { return __builtin_isnormal(x); } INLINE_OVERLOADABLE int isordered(float x, float y) { return isequal(x, x) && isequal(y, y); } INLINE_OVERLOADABLE int isunordered(float x, float y) { return isnan(x) || isnan(y); } -- 2.7.4