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 | 1 + backend/src/libocl/tmpl/ocl_math_20.tmpl.cl | 14 ++++++++++++++ backend/src/libocl/tmpl/ocl_math_20.tmpl.h | 1 + 4 files changed, 31 insertions(+)
diff --git a/backend/src/libocl/tmpl/ocl_math.tmpl.cl b/backend/src/libocl/tmpl/ocl_math.tmpl.cl index 6978c92..65cd7fc 100644 --- a/backend/src/libocl/tmpl/ocl_math.tmpl.cl +++ b/backend/src/libocl/tmpl/ocl_math.tmpl.cl @@ -4347,4 +4347,19 @@ OVERLOADABLE double fmax(double a, double b) return (c >= 0) ? a:b; } +OVERLOADABLE double fmin(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_NEGTIVE_INF) return a; + if(ub == DF_NEGTIVE_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 1bf9b9a..e4d2e55 100644 --- a/backend/src/libocl/tmpl/ocl_math.tmpl.h +++ b/backend/src/libocl/tmpl/ocl_math.tmpl.h @@ -237,6 +237,7 @@ OVERLOADABLE double ceil(double x); OVERLOADABLE double fabs(double x); OVERLOADABLE double floor(double x); OVERLOADABLE double fmax(double a, double b); +OVERLOADABLE double fmin(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); diff --git a/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl b/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl index d1e8305..69716ad 100644 --- a/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl +++ b/backend/src/libocl/tmpl/ocl_math_20.tmpl.cl @@ -4224,3 +4224,17 @@ OVERLOADABLE double fmax(double a, double b) return (c >= 0) ? a:b; } +OVERLOADABLE double fmin(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_NEGTIVE_INF) return a; + if(ub == DF_NEGTIVE_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 10f0bcc..a3d9578 100644 --- a/backend/src/libocl/tmpl/ocl_math_20.tmpl.h +++ b/backend/src/libocl/tmpl/ocl_math_20.tmpl.h @@ -213,6 +213,7 @@ OVERLOADABLE float half_tan(float x); OVERLOADABLE double ceil(double x); OVERLOADABLE double fabs(double x); OVERLOADABLE double fmax(double a, double b); +OVERLOADABLE double fmin(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); -- 2.7.4 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet