Signed-off-by: rander <rander.w...@intel.com> --- backend/src/libocl/tmpl/ocl_math.tmpl.cl | 15 +++++++++++++++ backend/src/libocl/tmpl/ocl_math.tmpl.h | 2 ++ backend/src/libocl/tmpl/ocl_math_20.tmpl.cl | 11 +++++++++++ backend/src/libocl/tmpl/ocl_math_20.tmpl.h | 2 ++ 4 files changed, 30 insertions(+)
diff --git a/backend/src/libocl/tmpl/ocl_math.tmpl.cl b/backend/src/libocl/tmpl/ocl_math.tmpl.cl index d526d6c..6978c92 100644 --- a/backend/src/libocl/tmpl/ocl_math.tmpl.cl +++ b/backend/src/libocl/tmpl/ocl_math.tmpl.cl @@ -4333,3 +4333,18 @@ OVERLOADABLE double mad(double a, double b, double c) return __gen_ocl_mad(a, b, c); } +OVERLOADABLE double fmax(double a, double b) +{ + ulong ua = as_ulong(a); + ulong ub =as_ulong(b); + + if((ua & DF_ABS_MASK) > DF_MAX_NORMAL) return b; + if((ub & DF_ABS_MASK) > DF_MAX_NORMAL) return a; + if(ua == DF_POSITIVE_INF) return a; + if(ub == DF_POSITIVE_INF) return b; + + double c = a - b; + return (c >= 0) ? a:b; +} + + diff --git a/backend/src/libocl/tmpl/ocl_math.tmpl.h b/backend/src/libocl/tmpl/ocl_math.tmpl.h index 852bf47..1bf9b9a 100644 --- a/backend/src/libocl/tmpl/ocl_math.tmpl.h +++ b/backend/src/libocl/tmpl/ocl_math.tmpl.h @@ -236,6 +236,7 @@ OVERLOADABLE float half_tan(float x); OVERLOADABLE double ceil(double x); OVERLOADABLE double fabs(double x); OVERLOADABLE double floor(double x); +OVERLOADABLE double fmax(double a, double b); OVERLOADABLE double fract(double x, global double *p); OVERLOADABLE double fract(double x, local double *p); OVERLOADABLE double fract(double x, private double *p); @@ -248,3 +249,4 @@ OVERLOADABLE int ilogb(double x); OVERLOADABLE double mad(double a, double b, double c); + diff --git a/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl b/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl index f459619..d1e8305 100644 --- a/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl +++ b/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl @@ -4210,6 +4210,17 @@ OVERLOADABLE double mad(double a, double b, double c) return __gen_ocl_mad(a, b, c); } +OVERLOADABLE double fmax(double a, double b) +{ + ulong ua = as_ulong(a); + ulong ub =as_ulong(b); + if((ua & DF_ABS_MASK) > DF_MAX_NORMAL) return b; + if((ub & DF_ABS_MASK) > DF_MAX_NORMAL) return a; + if(ua == DF_POSITIVE_INF) return a; + if(ub == DF_POSITIVE_INF) return b; + double c = a - b; + return (c >= 0) ? a:b; +} diff --git a/backend/src/libocl/tmpl/ocl_math_20.tmpl.h b/backend/src/libocl/tmpl/ocl_math_20.tmpl.h index ee313af..10f0bcc 100644 --- a/backend/src/libocl/tmpl/ocl_math_20.tmpl.h +++ b/backend/src/libocl/tmpl/ocl_math_20.tmpl.h @@ -212,6 +212,7 @@ OVERLOADABLE float half_tan(float x); //------- double ----------- OVERLOADABLE double ceil(double x); OVERLOADABLE double fabs(double x); +OVERLOADABLE double fmax(double a, double b); OVERLOADABLE double floor(double x); OVERLOADABLE double fract(double x, global double *p); OVERLOADABLE double fract(double x, local double *p); @@ -224,3 +225,4 @@ OVERLOADABLE double logb(double x); OVERLOADABLE int ilogb(double x); OVERLOADABLE double mad(double a, double b, double c); + -- 2.7.4 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet