enable unsigned 64bit version of "abs_diff"
authorHomer Hsing <homer.xing@intel.com>
Mon, 19 Aug 2013 02:38:00 +0000 (10:38 +0800)
committerZhigang Gong <zhigang.gong@linux.intel.com>
Mon, 19 Aug 2013 07:49:23 +0000 (15:49 +0800)
tested by piglit,

piglit/framework/../bin/cl-program-tester generated_tests/cl/builtin/int/builtin-ulong-abs_diff-1.0.generated.cl

piglit test case passed.

Signed-off-by: Homer Hsing <homer.xing@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
backend/src/backend/gen_context.cpp
backend/src/ocl_stdlib.tmpl.h

index 1a012fe..6297cd3 100644 (file)
@@ -562,8 +562,11 @@ namespace gbe
         loadBottomHalf(tmp1, src1);
         p->CMP(insn.extra.function, tmp0, tmp1);
         saveFlag(f3, 0, 1);
+        p->push();
+        p->curr.execWidth = 1;
         p->AND(f2, f2, f3);
         p->OR(f1, f1, f2);
+        p->pop();
         break;
       case GEN_CONDITIONAL_EQ:
         p->CMP(GEN_CONDITIONAL_EQ, tmp0, tmp1);
@@ -573,7 +576,10 @@ namespace gbe
         loadBottomHalf(tmp1, src1);
         p->CMP(GEN_CONDITIONAL_EQ, tmp0, tmp1);
         saveFlag(f2, 0, 1);
+        p->push();
+        p->curr.execWidth = 1;
         p->AND(f1, f1, f2);
+        p->pop();
         break;
       case GEN_CONDITIONAL_NEQ:
         p->CMP(GEN_CONDITIONAL_NEQ, tmp0, tmp1);
@@ -583,12 +589,16 @@ namespace gbe
         loadBottomHalf(tmp1, src1);
         p->CMP(GEN_CONDITIONAL_NEQ, tmp0, tmp1);
         saveFlag(f2, 0, 1);
+        p->push();
+        p->curr.execWidth = 1;
         p->OR(f1, f1, f2);
+        p->pop();
         break;
       default:
         NOT_IMPLEMENTED;
     }
     saveFlag(f2, flag, subFlag);
+    p->curr.execWidth = 1;
     p->AND(f1, f1, f2);
     p->MOV(GenRegister::flag(flag, subFlag), f1);
     p->pop();
index 8d4220c..59c0f6b 100644 (file)
@@ -511,7 +511,7 @@ INLINE_OVERLOADABLE ulong abs_diff (long x, long y) {
   return 0;
 }
 INLINE_OVERLOADABLE ulong abs_diff (ulong x, ulong y) {
-  return 0;
+  return y > x ? (y - x) : (x - y);
 }
 
 /////////////////////////////////////////////////////////////////////////////