summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Watry <awatry@gmail.com>2013-07-03 11:53:35 -0500
committerAaron Watry <awatry@gmail.com>2013-07-03 11:53:35 -0500
commit8337635527f1f33eba60d02555774f978c2a11ff (patch)
tree5dce41f328dbc8651c3e76b2d33735fe7ca36bf6
parent8f983bf1195525f06b9015195e54d39e7430dc60 (diff)
From: Tom Stellard <thomas.stellard at amd.com>
Implement mad24 and mul24 builtins
-rw-r--r--generic/include/clc/integer/abs.h2
-rw-r--r--generic/include/clc/integer/abs_diff.h2
-rw-r--r--generic/include/clc/integer/add_sat.h2
-rw-r--r--generic/include/clc/integer/clz.h2
-rw-r--r--generic/include/clc/integer/integer-gentype.inc (renamed from generic/include/clc/integer/gentype.inc)0
-rw-r--r--generic/include/clc/integer/mad24.h28
-rw-r--r--generic/include/clc/integer/mad24.inc1
-rw-r--r--generic/include/clc/integer/mul24.h28
-rw-r--r--generic/include/clc/integer/mul24.inc1
-rw-r--r--generic/include/clc/integer/rotate.h2
-rw-r--r--generic/include/clc/integer/sub_sat.h2
-rw-r--r--generic/include/clc/shared/clamp.h2
-rw-r--r--generic/include/clc/shared/max.h2
-rw-r--r--generic/include/clc/shared/min.h2
-rw-r--r--generic/lib/integer/abs.cl2
-rw-r--r--generic/lib/integer/abs_diff.cl2
-rw-r--r--generic/lib/integer/mad24.cl55
-rw-r--r--generic/lib/integer/mad24.inc6
-rw-r--r--generic/lib/integer/mul24.cl55
-rw-r--r--generic/lib/integer/mul24.inc12
-rw-r--r--generic/lib/integer/rotate.cl2
-rw-r--r--generic/lib/shared/clamp.cl2
-rw-r--r--generic/lib/shared/max.cl2
-rw-r--r--generic/lib/shared/min.cl2
24 files changed, 40 insertions, 176 deletions
diff --git a/generic/include/clc/integer/abs.h b/generic/include/clc/integer/abs.h
index 77a4cbe..717a48b 100644
--- a/generic/include/clc/integer/abs.h
+++ b/generic/include/clc/integer/abs.h
@@ -1,2 +1,2 @@
#define __CLC_BODY <clc/integer/abs.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/include/clc/integer/abs_diff.h b/generic/include/clc/integer/abs_diff.h
index 3f3b4b4..1c1da33 100644
--- a/generic/include/clc/integer/abs_diff.h
+++ b/generic/include/clc/integer/abs_diff.h
@@ -1,2 +1,2 @@
#define __CLC_BODY <clc/integer/abs_diff.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/include/clc/integer/add_sat.h b/generic/include/clc/integer/add_sat.h
index 2e5e698..6f6998e 100644
--- a/generic/include/clc/integer/add_sat.h
+++ b/generic/include/clc/integer/add_sat.h
@@ -1,2 +1,2 @@
#define __CLC_BODY <clc/integer/add_sat.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/include/clc/integer/clz.h b/generic/include/clc/integer/clz.h
index f7cdbf7..3ccb5e2 100644
--- a/generic/include/clc/integer/clz.h
+++ b/generic/include/clc/integer/clz.h
@@ -1,2 +1,2 @@
#define __CLC_BODY <clc/integer/clz.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/include/clc/integer/gentype.inc b/generic/include/clc/integer/integer-gentype.inc
index 6f4d699..6f4d699 100644
--- a/generic/include/clc/integer/gentype.inc
+++ b/generic/include/clc/integer/integer-gentype.inc
diff --git a/generic/include/clc/integer/mad24.h b/generic/include/clc/integer/mad24.h
index 05ec86b..1fde569 100644
--- a/generic/include/clc/integer/mad24.h
+++ b/generic/include/clc/integer/mad24.h
@@ -1,25 +1,3 @@
-
-_CLC_OVERLOAD _CLC_DECL int mad24(int x, int y, int z);
-
-_CLC_OVERLOAD _CLC_DECL int2 mad24(int2 x, int2 y, int2 z);
-
-_CLC_OVERLOAD _CLC_DECL int3 mad24(int3 x, int3 y, int3 z);
-
-_CLC_OVERLOAD _CLC_DECL int4 mad24(int4 x, int4 y, int4 z);
-
-_CLC_OVERLOAD _CLC_DECL int8 mad24(int8 x, int8 y, int8 z);
-
-_CLC_OVERLOAD _CLC_DECL int16 mad24(int16 x, int16 y, int16 z);
-
-_CLC_OVERLOAD _CLC_DECL uint mad24(uint x, uint y, uint z);
-
-_CLC_OVERLOAD _CLC_DECL uint2 mad24(uint2 x, uint2 y, uint2 z);
-
-_CLC_OVERLOAD _CLC_DECL uint3 mad24(uint3 x, uint3 y, uint3 z);
-
-_CLC_OVERLOAD _CLC_DECL uint4 mad24(uint4 x, uint4 y, uint4 z);
-
-_CLC_OVERLOAD _CLC_DECL uint8 mad24(uint8 x, uint8 y, uint8 z);
-
-_CLC_OVERLOAD _CLC_DECL uint16 mad24(uint16 x, uint16 y, uint16 z);
-
+#define __CLC_BODY <clc/integer/mad24.inc>
+#include <clc/integer/integer-gentype.inc>
+#undef __CLC_BODY \ No newline at end of file
diff --git a/generic/include/clc/integer/mad24.inc b/generic/include/clc/integer/mad24.inc
new file mode 100644
index 0000000..26eaf48
--- /dev/null
+++ b/generic/include/clc/integer/mad24.inc
@@ -0,0 +1 @@
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE mad24(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_GENTYPE z); \ No newline at end of file
diff --git a/generic/include/clc/integer/mul24.h b/generic/include/clc/integer/mul24.h
index e025d77..8700aef 100644
--- a/generic/include/clc/integer/mul24.h
+++ b/generic/include/clc/integer/mul24.h
@@ -1,25 +1,3 @@
-
-_CLC_OVERLOAD _CLC_DECL int mul24(int x, int y);
-
-_CLC_OVERLOAD _CLC_DECL int2 mul24(int2 x, int2 y);
-
-_CLC_OVERLOAD _CLC_DECL int3 mul24(int3 x, int3 y);
-
-_CLC_OVERLOAD _CLC_DECL int4 mul24(int4 x, int4 y);
-
-_CLC_OVERLOAD _CLC_DECL int8 mul24(int8 x, int8 y);
-
-_CLC_OVERLOAD _CLC_DECL int16 mul24(int16 x, int16 y);
-
-_CLC_OVERLOAD _CLC_DECL uint mul24(uint x, uint y);
-
-_CLC_OVERLOAD _CLC_DECL uint2 mul24(uint2 x, uint2 y);
-
-_CLC_OVERLOAD _CLC_DECL uint3 mul24(uint3 x, uint3 y);
-
-_CLC_OVERLOAD _CLC_DECL uint4 mul24(uint4 x, uint4 y);
-
-_CLC_OVERLOAD _CLC_DECL uint8 mul24(uint8 x, uint8 y);
-
-_CLC_OVERLOAD _CLC_DECL uint16 mul24(uint16 x, uint16 y);
-
+#define __CLC_BODY <clc/integer/mul24.inc>
+#include <clc/integer/integer-gentype.inc>
+#undef __CLC_BODY \ No newline at end of file
diff --git a/generic/include/clc/integer/mul24.inc b/generic/include/clc/integer/mul24.inc
new file mode 100644
index 0000000..4154997
--- /dev/null
+++ b/generic/include/clc/integer/mul24.inc
@@ -0,0 +1 @@
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE mul24(__CLC_GENTYPE x, __CLC_GENTYPE y); \ No newline at end of file
diff --git a/generic/include/clc/integer/rotate.h b/generic/include/clc/integer/rotate.h
index 6320223..42037f9 100644
--- a/generic/include/clc/integer/rotate.h
+++ b/generic/include/clc/integer/rotate.h
@@ -1,2 +1,2 @@
#define __CLC_BODY <clc/integer/rotate.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/include/clc/integer/sub_sat.h b/generic/include/clc/integer/sub_sat.h
index f841529..cce4d2c 100644
--- a/generic/include/clc/integer/sub_sat.h
+++ b/generic/include/clc/integer/sub_sat.h
@@ -1,2 +1,2 @@
#define __CLC_BODY <clc/integer/sub_sat.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/include/clc/shared/clamp.h b/generic/include/clc/shared/clamp.h
index a389b85..97611d8 100644
--- a/generic/include/clc/shared/clamp.h
+++ b/generic/include/clc/shared/clamp.h
@@ -1,5 +1,5 @@
#define __CLC_BODY <clc/shared/clamp.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
#define __CLC_BODY <clc/shared/clamp.inc>
#include <clc/math/gentype.inc>
diff --git a/generic/include/clc/shared/max.h b/generic/include/clc/shared/max.h
index ee20b9e..684d2e1 100644
--- a/generic/include/clc/shared/max.h
+++ b/generic/include/clc/shared/max.h
@@ -1,5 +1,5 @@
#define __CLC_BODY <clc/shared/max.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
#define __CLC_BODY <clc/shared/max.inc>
#include <clc/math/gentype.inc>
diff --git a/generic/include/clc/shared/min.h b/generic/include/clc/shared/min.h
index e11d9f9..b4b2d41 100644
--- a/generic/include/clc/shared/min.h
+++ b/generic/include/clc/shared/min.h
@@ -1,5 +1,5 @@
#define __CLC_BODY <clc/shared/min.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
#define __CLC_BODY <clc/shared/min.inc>
#include <clc/math/gentype.inc>
diff --git a/generic/lib/integer/abs.cl b/generic/lib/integer/abs.cl
index faff8d0..94ea113 100644
--- a/generic/lib/integer/abs.cl
+++ b/generic/lib/integer/abs.cl
@@ -1,4 +1,4 @@
#include <clc/clc.h>
#define __CLC_BODY <abs.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/lib/integer/abs_diff.cl b/generic/lib/integer/abs_diff.cl
index 3d75105..1ce5d34 100644
--- a/generic/lib/integer/abs_diff.cl
+++ b/generic/lib/integer/abs_diff.cl
@@ -1,4 +1,4 @@
#include <clc/clc.h>
#define __CLC_BODY <abs_diff.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/lib/integer/mad24.cl b/generic/lib/integer/mad24.cl
index bed5b79..94dd06a 100644
--- a/generic/lib/integer/mad24.cl
+++ b/generic/lib/integer/mad24.cl
@@ -1,55 +1,4 @@
#include <clc/clc.h>
-
-#define BODY <mad24.inc>
-
-#define GENTYPE int
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int2
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int3
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int4
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int8
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int16
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint2
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint3
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint4
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint8
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint16
-#include BODY
-#undef GENTYPE
-
-
-#undef BODY
+#define __CLC_BODY <mad24.inc>
+#include <clc/integer/integer-gentype.inc> \ No newline at end of file
diff --git a/generic/lib/integer/mad24.inc b/generic/lib/integer/mad24.inc
index f2bf91e..174af49 100644
--- a/generic/lib/integer/mad24.inc
+++ b/generic/lib/integer/mad24.inc
@@ -1,3 +1,3 @@
-_CLC_OVERLOAD _CLC_DEF GENTYPE mad24(GENTYPE x, GENTYPE y, GENTYPE z) {
- return x * y + z;
-}
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE mad24(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_GENTYPE z){
+ return mul24(x, y) + z;
+} \ No newline at end of file
diff --git a/generic/lib/integer/mul24.cl b/generic/lib/integer/mul24.cl
index a2cad96..99db0b2 100644
--- a/generic/lib/integer/mul24.cl
+++ b/generic/lib/integer/mul24.cl
@@ -1,55 +1,4 @@
#include <clc/clc.h>
-
-#define BODY <mul24.inc>
-
-#define GENTYPE int
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int2
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int3
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int4
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int8
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE int16
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint2
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint3
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint4
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint8
-#include BODY
-#undef GENTYPE
-
-#define GENTYPE uint16
-#include BODY
-#undef GENTYPE
-
-
-#undef BODY
+#define __CLC_BODY <mul24.inc>
+#include <clc/integer/integer-gentype.inc> \ No newline at end of file
diff --git a/generic/lib/integer/mul24.inc b/generic/lib/integer/mul24.inc
index b568ca8..1496410 100644
--- a/generic/lib/integer/mul24.inc
+++ b/generic/lib/integer/mul24.inc
@@ -1,3 +1,11 @@
-_CLC_OVERLOAD _CLC_DEF GENTYPE mul24(GENTYPE x, GENTYPE y) {
- return x * y;
+
+// We need to use shifts here in order to mantain the sign bit for signed
+// integers. The compiler should optimize this to (x & 0x00FFFFFF) for
+// unsgined integers.
+#define CONVERT_TO_24BIT(x) (((x) << (__CLC_GENTYPE)8) >> (__CLC_GENTYPE)8)
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE mul24(__CLC_GENTYPE x, __CLC_GENTYPE y){
+ return CONVERT_TO_24BIT(x) * CONVERT_TO_24BIT(y);
}
+
+#undef CONVERT_TO_24BIT \ No newline at end of file
diff --git a/generic/lib/integer/rotate.cl b/generic/lib/integer/rotate.cl
index 27ce515..c6d063e 100644
--- a/generic/lib/integer/rotate.cl
+++ b/generic/lib/integer/rotate.cl
@@ -1,4 +1,4 @@
#include <clc/clc.h>
#define __CLC_BODY <rotate.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
diff --git a/generic/lib/shared/clamp.cl b/generic/lib/shared/clamp.cl
index c79a358..b566538 100644
--- a/generic/lib/shared/clamp.cl
+++ b/generic/lib/shared/clamp.cl
@@ -1,7 +1,7 @@
#include <clc/clc.h>
#define __CLC_BODY <clamp.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
#ifdef cl_khr_fp64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
diff --git a/generic/lib/shared/max.cl b/generic/lib/shared/max.cl
index 1c4457c..54d8457 100644
--- a/generic/lib/shared/max.cl
+++ b/generic/lib/shared/max.cl
@@ -1,7 +1,7 @@
#include <clc/clc.h>
#define __CLC_BODY <max.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
#ifdef cl_khr_fp64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
diff --git a/generic/lib/shared/min.cl b/generic/lib/shared/min.cl
index 433087a..cc821b2 100644
--- a/generic/lib/shared/min.cl
+++ b/generic/lib/shared/min.cl
@@ -1,7 +1,7 @@
#include <clc/clc.h>
#define __CLC_BODY <min.inc>
-#include <clc/integer/gentype.inc>
+#include <clc/integer/integer-gentype.inc>
#ifdef cl_khr_fp64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable