summaryrefslogtreecommitdiff
path: root/generic
diff options
context:
space:
mode:
authorAaron Watry <awatry@gmail.com>2013-04-16 18:48:04 -0500
committerAaron Watry <awatry@gmail.com>2013-04-16 18:48:04 -0500
commitfbb4198b6ea4e5b6946dba9b003bd79304c091b5 (patch)
tree0377aef6d731d51590a3ec19516689dd8a81c7b4 /generic
parentc54e23e40661c40e4da407a00c9c381dfd65716e (diff)
libclc: add mad24() implementation
The spec requires the first 2 inputs to be within the bounds of a 24-bit integer's possible values. If they're not, then results are implementation defined.
Diffstat (limited to 'generic')
-rw-r--r--generic/include/clc/clc.h1
-rw-r--r--generic/include/clc/integer/mad24.h25
-rw-r--r--generic/lib/SOURCES1
-rw-r--r--generic/lib/integer/mad24.cl55
-rw-r--r--generic/lib/integer/mad24.inc3
5 files changed, 85 insertions, 0 deletions
diff --git a/generic/include/clc/clc.h b/generic/include/clc/clc.h
index d2858a8..746a301 100644
--- a/generic/include/clc/clc.h
+++ b/generic/include/clc/clc.h
@@ -64,6 +64,7 @@
#include <clc/integer/abs_diff.h>
#include <clc/integer/add_sat.h>
#include <clc/integer/clz.h>
+#include <clc/integer/mad24.h>
#include <clc/integer/rotate.h>
#include <clc/integer/sub_sat.h>
diff --git a/generic/include/clc/integer/mad24.h b/generic/include/clc/integer/mad24.h
new file mode 100644
index 0000000..05ec86b
--- /dev/null
+++ b/generic/include/clc/integer/mad24.h
@@ -0,0 +1,25 @@
+
+_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);
+
diff --git a/generic/lib/SOURCES b/generic/lib/SOURCES
index 59eb9bb..ce9f638 100644
--- a/generic/lib/SOURCES
+++ b/generic/lib/SOURCES
@@ -11,6 +11,7 @@ integer/add_sat_impl.ll
integer/clz.cl
integer/clz_if.ll
integer/clz_impl.ll
+integer/mad24.cl
integer/rotate.cl
integer/sub_sat.cl
integer/sub_sat_if.ll
diff --git a/generic/lib/integer/mad24.cl b/generic/lib/integer/mad24.cl
new file mode 100644
index 0000000..bed5b79
--- /dev/null
+++ b/generic/lib/integer/mad24.cl
@@ -0,0 +1,55 @@
+#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
diff --git a/generic/lib/integer/mad24.inc b/generic/lib/integer/mad24.inc
new file mode 100644
index 0000000..f2bf91e
--- /dev/null
+++ b/generic/lib/integer/mad24.inc
@@ -0,0 +1,3 @@
+_CLC_OVERLOAD _CLC_DEF GENTYPE mad24(GENTYPE x, GENTYPE y, GENTYPE z) {
+ return x * y + z;
+}