diff options
author | rander <rander.wang@intel.com> | 2017-03-31 15:29:17 +0800 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2017-04-17 16:08:49 +0800 |
commit | 9db571f062a5ffcd01b3980a5e27057123da7a2d (patch) | |
tree | 9ca23a896329f80a5027bee14464e0cded31a272 | |
parent | ab61725c72cddf52b3992b56baa74a57393fb56f (diff) | |
download | beignet-9db571f062a5ffcd01b3980a5e27057123da7a2d.tar.gz |
backend: add double version of fmin fmax
do it according to spec
Signed-off-by: rander <rander.wang@intel.com>
Tested-by: Yang Rong <rong.r.yang@intel.com>
-rw-r--r-- | backend/src/libocl/tmpl/ocl_math_common.tmpl.cl | 30 | ||||
-rw-r--r-- | backend/src/libocl/tmpl/ocl_math_common.tmpl.h | 2 |
2 files changed, 32 insertions, 0 deletions
diff --git a/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl b/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl index 63aa0de0..ad255889 100644 --- a/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl +++ b/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl @@ -1413,6 +1413,36 @@ OVERLOADABLE double fdim(double x, double y) return x > y ? (x - y) : +0.f; } +OVERLOADABLE double maxmag(double x, double y) +{ + ulong ua = as_ulong(x); + ulong ub =as_ulong(y); + + if((ua & DF_ABS_MASK) > DF_MAX_NORMAL) return y; + if((ub & DF_ABS_MASK) > DF_MAX_NORMAL) return x; + if(ua == DF_POSITIVE_INF) return x; + if(ub == DF_POSITIVE_INF) return y; + + double retVal = (fabs(x) > fabs(y)) ? x:y; + + return retVal; +} + +OVERLOADABLE double minmag(double x, double y) +{ + ulong ua = as_ulong(x); + ulong ub =as_ulong(y); + + if((ua & DF_ABS_MASK) > DF_MAX_NORMAL) return y; + if((ub & DF_ABS_MASK) > DF_MAX_NORMAL) return x; + if(ua == DF_NEGTIVE_INF) return x; + if(ub == DF_NEGTIVE_INF) return y; + + double retVal = (fabs(x) < fabs(y)) ? x:y; + + return retVal; +} + OVERLOADABLE double ldexp(double x, int n) { ulong ux = as_ulong(x); diff --git a/backend/src/libocl/tmpl/ocl_math_common.tmpl.h b/backend/src/libocl/tmpl/ocl_math_common.tmpl.h index f7a651e4..29b685c9 100644 --- a/backend/src/libocl/tmpl/ocl_math_common.tmpl.h +++ b/backend/src/libocl/tmpl/ocl_math_common.tmpl.h @@ -50,6 +50,8 @@ OVERLOADABLE double fmax(double a, double b); OVERLOADABLE double fmin(double a, double b); OVERLOADABLE double fmod (double x, double y); OVERLOADABLE double fma(double x, double y, double z); +OVERLOADABLE double maxmag(double x, double y); +OVERLOADABLE double minmag(double x, double y); OVERLOADABLE double hypot(double x, double y); OVERLOADABLE double ldexp(double x, int n); OVERLOADABLE double log(double x); |