Signed-off-by: rander <rander.w...@intel.com>
---
 backend/src/libocl/script/ocl_convert.sh | 35 ++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/backend/src/libocl/script/ocl_convert.sh 
b/backend/src/libocl/script/ocl_convert.sh
index 460aefe..b826b38 100755
--- a/backend/src/libocl/script/ocl_convert.sh
+++ b/backend/src/libocl/script/ocl_convert.sh
@@ -550,6 +550,41 @@ OVERLOADABLE float __convert_float_rtn(uint x)
     return __convert_float_rtz(x);
 }
 
+OVERLOADABLE int convert_int_rtn(double x)
+{
+       int ret, iexp ;
+       long lval = as_long(x);
+       if((lval & DF_ABS_MASK) == 0) return 0;
+
+       uint sign = (lval & DF_SIGN_MASK) >> DF_SIGN_OFFSET;
+       int exp = ((lval & DF_EXP_MASK) >> DF_EXP_OFFSET) - DF_EXP_BIAS;
+       ulong ma = (lval &DF_MAN_MASK);
+
+       long intPart = (ma |DF_IMPLICITE_ONE)>> (DF_EXP_OFFSET -exp);
+       ret = (int)intPart;
+       iexp = (exp < 0) ? 0:exp;
+       ret = (exp < 0) ? 0:ret;
+       ret = sign ? -ret:ret;
+       long mask = (1L << (DF_EXP_OFFSET -iexp)) - 1;
+       ret = ((ma & mask) || (exp < 0)) ? ret -sign:ret;
+
+       return ret;
+}
+
+OVERLOADABLE uint convert_uint_rtn(double x)
+{
+       uint ret, iexp ;
+       long lval = as_long(x);
+       int exp = ((lval & DF_EXP_MASK) >> DF_EXP_OFFSET) - DF_EXP_BIAS;
+       long ma = (lval &DF_MAN_MASK);
+
+       long intPart = (ma |DF_IMPLICITE_ONE)>> (DF_EXP_OFFSET -exp);
+       ret = (int)intPart;
+       ret = (exp < 0) ? 0:ret;
+
+       return ret;
+}
+
 OVERLOADABLE long convert_long_rtn(double x)
 {
        int iexp;
-- 
2.7.4

_______________________________________________
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to