summaryrefslogtreecommitdiffstats
path: root/libclc/generic/include/clc/integer
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-06-26 18:21:13 +0000
committerTom Stellard <thomas.stellard@amd.com>2013-06-26 18:21:13 +0000
commit0bb381eaecfe3d99646b73665610a2a5699cb727 (patch)
tree0755840cf3fe60cf80348c070963ea5403cfc2a2 /libclc/generic/include/clc/integer
parentcb133c932262acc2e98fd42e7873dc4e317e1094 (diff)
downloadbcm5719-llvm-0bb381eaecfe3d99646b73665610a2a5699cb727.tar.gz
bcm5719-llvm-0bb381eaecfe3d99646b73665610a2a5699cb727.zip
libclc: implement rotate builtin
This implementation does a lot of bit shifting and masking. Suffice to say, this is somewhat suboptimal... but it does look to produce correct results (after the piglit tests were corrected for sign extension issues). Someone who knows LLVM better than I could re-write this more efficiently. Patch by: Aaron Watry llvm-svn: 184996
Diffstat (limited to 'libclc/generic/include/clc/integer')
-rw-r--r--libclc/generic/include/clc/integer/gentype.inc11
-rw-r--r--libclc/generic/include/clc/integer/rotate.h2
-rw-r--r--libclc/generic/include/clc/integer/rotate.inc1
3 files changed, 14 insertions, 0 deletions
diff --git a/libclc/generic/include/clc/integer/gentype.inc b/libclc/generic/include/clc/integer/gentype.inc
index 0b32efda9f0..005b9af4c13 100644
--- a/libclc/generic/include/clc/integer/gentype.inc
+++ b/libclc/generic/include/clc/integer/gentype.inc
@@ -1,3 +1,4 @@
+#define GENSIZE 8
#define GENTYPE char
#define UGENTYPE uchar
#define SGENTYPE char
@@ -94,6 +95,9 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef GENSIZE
+#define GENSIZE 16
+
#define GENTYPE short
#define UGENTYPE ushort
#define SGENTYPE short
@@ -190,6 +194,9 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef GENSIZE
+#define GENSIZE 32
+
#define GENTYPE int
#define UGENTYPE uint
#define SGENTYPE int
@@ -286,6 +293,9 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef GENSIZE
+#define GENSIZE 64
+
#define GENTYPE long
#define UGENTYPE ulong
#define SGENTYPE long
@@ -382,4 +392,5 @@
#undef UGENTYPE
#undef SGENTYPE
+#undef GENSIZE
#undef BODY
diff --git a/libclc/generic/include/clc/integer/rotate.h b/libclc/generic/include/clc/integer/rotate.h
new file mode 100644
index 00000000000..e163bc88ca6
--- /dev/null
+++ b/libclc/generic/include/clc/integer/rotate.h
@@ -0,0 +1,2 @@
+#define BODY <clc/integer/rotate.inc>
+#include <clc/integer/gentype.inc>
diff --git a/libclc/generic/include/clc/integer/rotate.inc b/libclc/generic/include/clc/integer/rotate.inc
new file mode 100644
index 00000000000..5720e1c6de1
--- /dev/null
+++ b/libclc/generic/include/clc/integer/rotate.inc
@@ -0,0 +1 @@
+_CLC_OVERLOAD _CLC_DECL GENTYPE rotate(GENTYPE x, GENTYPE y);
OpenPOWER on IntegriCloud