diff options
author | Aaron Watry <awatry@gmail.com> | 2013-04-13 11:22:53 -0500 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2013-04-19 23:27:14 -0400 |
commit | 864f8769e416516eb616ac524a2781560b5c8c54 (patch) | |
tree | 4e7bc93a7f2d562b0617b809000681dafa2a887d | |
parent | d2d53dc64cc5a2916f27aa4550c7775b0ab0569c (diff) |
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.
-rw-r--r-- | generic/include/clc/integer/gentype.inc | 23 | ||||
-rw-r--r-- | generic/include/clc/math/gentype.inc | 8 | ||||
-rw-r--r-- | generic/include/clc/shared/min.inc | 4 | ||||
-rw-r--r-- | generic/lib/shared/min.inc | 6 |
4 files changed, 41 insertions, 0 deletions
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 |