From 010806cdce55414370e4768e3d9ccfbcc51fb902 Mon Sep 17 00:00:00 2001 From: Aaron Watry Date: Sat, 13 Apr 2013 11:18:10 -0500 Subject: 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. --- generic/include/clc/integer/gentype.inc | 23 +++++++++++++++++++++++ generic/include/clc/math/gentype.inc | 8 ++++++++ generic/include/clc/shared/min.inc | 4 ++++ generic/lib/shared/min.inc | 6 ++++++ 4 files changed, 41 insertions(+) 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 -- cgit v1.2.3