summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrander <rander.wang@intel.com>2017-03-31 15:29:17 +0800
committerYang Rong <rong.r.yang@intel.com>2017-04-17 16:08:49 +0800
commit9db571f062a5ffcd01b3980a5e27057123da7a2d (patch)
tree9ca23a896329f80a5027bee14464e0cded31a272
parentab61725c72cddf52b3992b56baa74a57393fb56f (diff)
downloadbeignet-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.cl30
-rw-r--r--backend/src/libocl/tmpl/ocl_math_common.tmpl.h2
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);