From 24c3167b0fcf7d9c803677bd2abdc9ed0f2dd468 Mon Sep 17 00:00:00 2001 From: Homer Hsing Date: Mon, 10 Dec 2012 09:02:02 +0800 Subject: [PATCH] support OpenCL 1.1 relational builtin functions "all","any" --- backend/src/ocl_stdlib.h | 46 ++++++++++++++++++++++++++++++++++++++++++ backend/src/ocl_stdlib_str.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/backend/src/ocl_stdlib.h b/backend/src/ocl_stdlib.h index 0fb7e4e..aadeeaf 100644 --- a/backend/src/ocl_stdlib.h +++ b/backend/src/ocl_stdlib.h @@ -203,6 +203,52 @@ DEC16(isunordered); #undef DEC4 #undef DEC8 #undef DEC16 +#define DEC1(type) INLINE_OVERLOADABLE int any(type a) { return a<0; } +#define DEC2(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0; } +#define DEC3(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0; } +#define DEC4(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0 || a.s3<0; } +#define DEC8(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0 || a.s3<0 || a.s4<0 || a.s5<0 || a.s6<0 || a.s7<0; } +#define DEC16(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0 || a.s3<0 || a.s4<0 || a.s5<0 || a.s6<0 || a.s7<0 || a.s8<0 || a.s9<0 || a.sA<0 || a.sB<0 || a.sC<0 || a.sD<0 || a.sE<0 || a.sF<0; } +DEC1(char); +DEC1(short); +DEC1(int); +DEC1(long); +#define DEC(n) DEC##n(char##n); DEC##n(short##n); DEC##n(int##n); DEC##n(long##n); +DEC(2); +DEC(3); +DEC(4); +DEC(8); +DEC(16); +#undef DEC +#undef DEC1 +#undef DEC2 +#undef DEC3 +#undef DEC4 +#undef DEC8 +#undef DEC16 +#define DEC1(type) INLINE_OVERLOADABLE int all(type a) { return a<0; } +#define DEC2(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0; } +#define DEC3(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0; } +#define DEC4(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0 && a.s3<0; } +#define DEC8(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0 && a.s3<0 && a.s4<0 && a.s5<0 && a.s6<0 && a.s7<0; } +#define DEC16(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0 && a.s3<0 && a.s4<0 && a.s5<0 && a.s6<0 && a.s7<0 && a.s8<0 && a.s9<0 && a.sA<0 && a.sB<0 && a.sC<0 && a.sD<0 && a.sE<0 && a.sF<0; } +DEC1(char); +DEC1(short); +DEC1(int); +DEC1(long); +#define DEC(n) DEC##n(char##n); DEC##n(short##n); DEC##n(int##n); DEC##n(long##n); +DEC(2); +DEC(3); +DEC(4); +DEC(8); +DEC(16); +#undef DEC +#undef DEC1 +#undef DEC2 +#undef DEC3 +#undef DEC4 +#undef DEC8 +#undef DEC16 ///////////////////////////////////////////////////////////////////////////// // OpenCL address space ///////////////////////////////////////////////////////////////////////////// diff --git a/backend/src/ocl_stdlib_str.cpp b/backend/src/ocl_stdlib_str.cpp index e9892ef..77127c8 100644 --- a/backend/src/ocl_stdlib_str.cpp +++ b/backend/src/ocl_stdlib_str.cpp @@ -207,6 +207,52 @@ std::string ocl_stdlib_str = "#undef DEC4\n" "#undef DEC8\n" "#undef DEC16\n" +"#define DEC1(type) INLINE_OVERLOADABLE int any(type a) { return a<0; }\n" +"#define DEC2(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0; }\n" +"#define DEC3(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0; }\n" +"#define DEC4(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0 || a.s3<0; }\n" +"#define DEC8(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0 || a.s3<0 || a.s4<0 || a.s5<0 || a.s6<0 || a.s7<0; }\n" +"#define DEC16(type) INLINE_OVERLOADABLE int any(type a) { return a.s0<0 || a.s1<0 || a.s2<0 || a.s3<0 || a.s4<0 || a.s5<0 || a.s6<0 || a.s7<0 || a.s8<0 || a.s9<0 || a.sA<0 || a.sB<0 || a.sC<0 || a.sD<0 || a.sE<0 || a.sF<0; }\n" +"DEC1(char);\n" +"DEC1(short);\n" +"DEC1(int);\n" +"DEC1(long);\n" +"#define DEC(n) DEC##n(char##n); DEC##n(short##n); DEC##n(int##n); DEC##n(long##n);\n" +"DEC(2);\n" +"DEC(3);\n" +"DEC(4);\n" +"DEC(8);\n" +"DEC(16);\n" +"#undef DEC\n" +"#undef DEC1\n" +"#undef DEC2\n" +"#undef DEC3\n" +"#undef DEC4\n" +"#undef DEC8\n" +"#undef DEC16\n" +"#define DEC1(type) INLINE_OVERLOADABLE int all(type a) { return a<0; }\n" +"#define DEC2(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0; }\n" +"#define DEC3(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0; }\n" +"#define DEC4(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0 && a.s3<0; }\n" +"#define DEC8(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0 && a.s3<0 && a.s4<0 && a.s5<0 && a.s6<0 && a.s7<0; }\n" +"#define DEC16(type) INLINE_OVERLOADABLE int all(type a) { return a.s0<0 && a.s1<0 && a.s2<0 && a.s3<0 && a.s4<0 && a.s5<0 && a.s6<0 && a.s7<0 && a.s8<0 && a.s9<0 && a.sA<0 && a.sB<0 && a.sC<0 && a.sD<0 && a.sE<0 && a.sF<0; }\n" +"DEC1(char);\n" +"DEC1(short);\n" +"DEC1(int);\n" +"DEC1(long);\n" +"#define DEC(n) DEC##n(char##n); DEC##n(short##n); DEC##n(int##n); DEC##n(long##n);\n" +"DEC(2);\n" +"DEC(3);\n" +"DEC(4);\n" +"DEC(8);\n" +"DEC(16);\n" +"#undef DEC\n" +"#undef DEC1\n" +"#undef DEC2\n" +"#undef DEC3\n" +"#undef DEC4\n" +"#undef DEC8\n" +"#undef DEC16\n" "/////////////////////////////////////////////////////////////////////////////\n" "// OpenCL address space\n" "/////////////////////////////////////////////////////////////////////////////\n" -- 2.7.4