diff options
author | Homer Hsing <homer.xing@intel.com> | 2012-12-10 09:02:02 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@linux.intel.com> | 2013-03-29 19:10:48 +0800 |
commit | 24c3167b0fcf7d9c803677bd2abdc9ed0f2dd468 (patch) | |
tree | 34508115e492b7448912dc75649d939543ac3633 | |
parent | 39fb171336d75a23bf4addb3a2326bdc3770c14c (diff) |
support OpenCL 1.1 relational builtin functions "all","any"
-rw-r--r-- | backend/src/ocl_stdlib.h | 46 | ||||
-rw-r--r-- | backend/src/ocl_stdlib_str.cpp | 46 |
2 files changed, 92 insertions, 0 deletions
diff --git a/backend/src/ocl_stdlib.h b/backend/src/ocl_stdlib.h index 0fb7e4ed..aadeeafb 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 e9892ef7..77127c8b 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" |