Author: jvesely Date: Tue Mar 6 09:48:43 2018 New Revision: 326819 URL: http://llvm.org/viewvc/llvm-project?rev=326819&view=rev Log: select: Add vector implementation
Passes CTS on Carrizo Reviewed-by: Aaron Watry <awa...@gmail.com> Signed-off-by: Jan Vesely <jan.ves...@rutgers.edu> Added: libclc/trunk/generic/include/clc/relational/select.inc libclc/trunk/generic/lib/relational/select.cl libclc/trunk/generic/lib/relational/select.inc Modified: libclc/trunk/generic/include/clc/relational/select.h libclc/trunk/generic/lib/SOURCES Modified: libclc/trunk/generic/include/clc/relational/select.h URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/relational/select.h?rev=326819&r1=326818&r2=326819&view=diff ============================================================================== --- libclc/trunk/generic/include/clc/relational/select.h (original) +++ libclc/trunk/generic/include/clc/relational/select.h Tue Mar 6 09:48:43 2018 @@ -1 +1,11 @@ -#define select(a, b, c) ((c) ? (b) : (a)) +/* Duplciate these so we don't have to distribute utils.h */ +#define __CLC_CONCAT(x, y) x ## y +#define __CLC_XCONCAT(x, y) __CLC_CONCAT(x, y) + +#define __CLC_BODY <clc/relational/select.inc> +#include <clc/math/gentype.inc> +#define __CLC_BODY <clc/relational/select.inc> +#include <clc/integer/gentype.inc> + +#undef __CLC_CONCAT +#undef __CLC_XCONCAT Added: libclc/trunk/generic/include/clc/relational/select.inc URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/relational/select.inc?rev=326819&view=auto ============================================================================== --- libclc/trunk/generic/include/clc/relational/select.inc (added) +++ libclc/trunk/generic/include/clc/relational/select.inc Tue Mar 6 09:48:43 2018 @@ -0,0 +1,25 @@ +#ifdef __CLC_SCALAR +#define __CLC_VECSIZE +#endif + +#if __CLC_FPSIZE == 64 +#define __CLC_S_GENTYPE __CLC_XCONCAT(long, __CLC_VECSIZE) +#define __CLC_U_GENTYPE __CLC_XCONCAT(ulong, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 32 +#define __CLC_S_GENTYPE __CLC_XCONCAT(int, __CLC_VECSIZE) +#define __CLC_U_GENTYPE __CLC_XCONCAT(uint, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 16 +#define __CLC_S_GENTYPE __CLC_XCONCAT(char, __CLC_VECSIZE) +#define __CLC_U_GENTYPE __CLC_XCONCAT(uchar, __CLC_VECSIZE) +#endif + +_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_S_GENTYPE z); +_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_U_GENTYPE z); + +#ifdef __CLC_FPSIZE +#undef __CLC_S_GENTYPE +#undef __CLC_U_GENTYPE +#endif +#ifdef __CLC_SCALAR +#undef __CLC_VECSIZE +#endif Modified: libclc/trunk/generic/lib/SOURCES URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/SOURCES?rev=326819&r1=326818&r2=326819&view=diff ============================================================================== --- libclc/trunk/generic/lib/SOURCES (original) +++ libclc/trunk/generic/lib/SOURCES Tue Mar 6 09:48:43 2018 @@ -189,6 +189,7 @@ relational/isnormal.cl relational/isnotequal.cl relational/isordered.cl relational/isunordered.cl +relational/select.cl relational/signbit.cl shared/clamp.cl shared/max.cl Added: libclc/trunk/generic/lib/relational/select.cl URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/relational/select.cl?rev=326819&view=auto ============================================================================== --- libclc/trunk/generic/lib/relational/select.cl (added) +++ libclc/trunk/generic/lib/relational/select.cl Tue Mar 6 09:48:43 2018 @@ -0,0 +1,7 @@ +#include <clc/clc.h> +#include <utils.h> + +#define __CLC_BODY <select.inc> +#include <clc/math/gentype.inc> +#define __CLC_BODY <select.inc> +#include <clc/integer/gentype.inc> Added: libclc/trunk/generic/lib/relational/select.inc URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/relational/select.inc?rev=326819&view=auto ============================================================================== --- libclc/trunk/generic/lib/relational/select.inc (added) +++ libclc/trunk/generic/lib/relational/select.inc Tue Mar 6 09:48:43 2018 @@ -0,0 +1,47 @@ +#ifdef __CLC_SCALAR +#define __CLC_VECSIZE +#endif + +#if __CLC_FPSIZE == 64 +#define __CLC_S_GENTYPE __CLC_XCONCAT(long, __CLC_VECSIZE) +#define __CLC_U_GENTYPE __CLC_XCONCAT(ulong, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 32 +#define __CLC_S_GENTYPE __CLC_XCONCAT(int, __CLC_VECSIZE) +#define __CLC_U_GENTYPE __CLC_XCONCAT(uint, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 16 +#define __CLC_S_GENTYPE __CLC_XCONCAT(char, __CLC_VECSIZE) +#define __CLC_U_GENTYPE __CLC_XCONCAT(uchar, __CLC_VECSIZE) +#endif +#ifdef __CLC_FPSIZE +#define __CLC_GENSIZE __CLC_FPSIZE +#endif + +#define __CLC_AS_S_GENTYPE __CLC_XCONCAT(as_, __CLC_S_GENTYPE) +#define __CLC_AS_GENTYPE __CLC_XCONCAT(as_, __CLC_GENTYPE) + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_S_GENTYPE z) +{ +#ifdef __CLC_SCALAR + return z ? y : x; +#else + __CLC_S_GENTYPE bitmask = z >> (__CLC_GENSIZE - 1); + return __CLC_AS_GENTYPE(bitselect(__CLC_AS_S_GENTYPE(x), __CLC_AS_S_GENTYPE(y), bitmask)); +#endif +} + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_U_GENTYPE z) +{ + return select(x, y, __CLC_AS_S_GENTYPE(z)); +} + +#undef __CLC_AS_S_GENTYPE +#undef __CLC_AS_GENTYPE + +#ifdef __CLC_FPSIZE +#undef __CLC_S_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_GENSIZE +#endif +#ifdef __CLC_SCALAR +#undef __CLC_VECSIZE +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits