summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Watry <awatry@gmail.com>2013-04-13 11:22:53 -0500
committerTom Stellard <thomas.stellard@amd.com>2013-04-19 23:27:14 -0400
commit864f8769e416516eb616ac524a2781560b5c8c54 (patch)
tree4e7bc93a7f2d562b0617b809000681dafa2a887d
parentd2d53dc64cc5a2916f27aa4550c7775b0ab0569c (diff)
libclc: Implement the min(vec, scalar) version of the min builtin.
Checks if the current GENTYPE is scalar, and if not, then defines a separate implementation of the function which casts the second arg to vector before proceeding.
-rw-r--r--generic/include/clc/integer/gentype.inc23
-rw-r--r--generic/include/clc/math/gentype.inc8
-rw-r--r--generic/include/clc/shared/min.inc4
-rw-r--r--generic/lib/shared/min.inc6
4 files changed, 41 insertions, 0 deletions
diff --git a/generic/include/clc/integer/gentype.inc b/generic/include/clc/integer/gentype.inc
index dd7d061..95a37d5 100644
--- a/generic/include/clc/integer/gentype.inc
+++ b/generic/include/clc/integer/gentype.inc
@@ -1,4 +1,8 @@
+//These 2 defines only change when switching between data sizes or base types to
+//keep this file manageable.
#define GENSIZE 8
+#define SCALAR_GENTYPE char
+
#define GENTYPE char
#define UGENTYPE uchar
#define SGENTYPE char
@@ -49,6 +53,9 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef SCALAR_GENTYPE
+#define SCALAR_GENTYPE uchar
+
#define GENTYPE uchar
#define UGENTYPE uchar
#define SGENTYPE char
@@ -101,6 +108,8 @@
#undef GENSIZE
#define GENSIZE 16
+#undef SCALAR_GENTYPE
+#define SCALAR_GENTYPE short
#define GENTYPE short
#define UGENTYPE ushort
@@ -152,6 +161,9 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef SCALAR_GENTYPE
+#define SCALAR_GENTYPE ushort
+
#define GENTYPE ushort
#define UGENTYPE ushort
#define SGENTYPE short
@@ -204,6 +216,8 @@
#undef GENSIZE
#define GENSIZE 32
+#undef SCALAR_GENTYPE
+#define SCALAR_GENTYPE int
#define GENTYPE int
#define UGENTYPE uint
@@ -255,6 +269,9 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef SCALAR_GENTYPE
+#define SCALAR_GENTYPE uint
+
#define GENTYPE uint
#define UGENTYPE uint
#define SGENTYPE int
@@ -307,6 +324,8 @@
#undef GENSIZE
#define GENSIZE 64
+#undef SCALAR_GENTYPE
+#define SCALAR_GENTYPE long
#define GENTYPE long
#define UGENTYPE ulong
@@ -358,6 +377,9 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef SCALAR_GENTYPE
+#define SCALAR_GENTYPE ulong
+
#define GENTYPE ulong
#define UGENTYPE ulong
#define SGENTYPE long
@@ -409,4 +431,5 @@
#undef SGENTYPE
#undef GENSIZE
+#undef SCALAR_GENTYPE
#undef BODY
diff --git a/generic/include/clc/math/gentype.inc b/generic/include/clc/math/gentype.inc
index b525c4b..4ed2151 100644
--- a/generic/include/clc/math/gentype.inc
+++ b/generic/include/clc/math/gentype.inc
@@ -1,3 +1,5 @@
+#define SCALAR_GENTYPE float
+
#define GENTYPE float
#define SCALAR
#include BODY
@@ -24,7 +26,11 @@
#include BODY
#undef GENTYPE
+#undef SCALAR_GENTYPE
+
#ifdef cl_khr_fp64
+#define SCALAR_GENTYPE double
+
#define SCALAR
#define GENTYPE double
#include BODY
@@ -50,6 +56,8 @@
#define GENTYPE double16
#include BODY
#undef GENTYPE
+
+#undef SCALAR_GENTYPE
#endif
#undef BODY
diff --git a/generic/include/clc/shared/min.inc b/generic/include/clc/shared/min.inc
index 3bc9880..cf3afaf 100644
--- a/generic/include/clc/shared/min.inc
+++ b/generic/include/clc/shared/min.inc
@@ -1 +1,5 @@
_CLC_OVERLOAD _CLC_DECL GENTYPE min(GENTYPE a, GENTYPE b);
+
+#ifndef SCALAR
+_CLC_OVERLOAD _CLC_DECL GENTYPE min(GENTYPE a, SCALAR_GENTYPE b);
+#endif \ No newline at end of file
diff --git a/generic/lib/shared/min.inc b/generic/lib/shared/min.inc
index b99bc35..58a22e1 100644
--- a/generic/lib/shared/min.inc
+++ b/generic/lib/shared/min.inc
@@ -1,3 +1,9 @@
_CLC_OVERLOAD _CLC_DEF GENTYPE min(GENTYPE a, GENTYPE b) {
return (a < b ? a : b);
}
+
+#ifndef SCALAR
+_CLC_OVERLOAD _CLC_DEF GENTYPE min(GENTYPE a, SCALAR_GENTYPE b) {
+ return (a < (GENTYPE)b ? a : (GENTYPE)b);
+}
+#endif