diff options
| author | Tom Stellard <thomas.stellard@amd.com> | 2013-06-26 18:21:44 +0000 |
|---|---|---|
| committer | Tom Stellard <thomas.stellard@amd.com> | 2013-06-26 18:21:44 +0000 |
| commit | 075b31a2fa8b5405ce8c1afa736cd240016f1ec8 (patch) | |
| tree | 1380fe587234faf8e9ea855847a43fda88cedfba | |
| parent | 0be3acfc7067d6f1d951735f8d7d3c5e1c0a316c (diff) | |
| download | bcm5719-llvm-075b31a2fa8b5405ce8c1afa736cd240016f1ec8.tar.gz bcm5719-llvm-075b31a2fa8b5405ce8c1afa736cd240016f1ec8.zip | |
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.
Patch by: Aaron Watry
llvm-svn: 185002
| -rw-r--r-- | libclc/generic/include/clc/integer/gentype.inc | 23 | ||||
| -rw-r--r-- | libclc/generic/include/clc/math/gentype.inc | 8 | ||||
| -rw-r--r-- | libclc/generic/include/clc/shared/min.inc | 4 | ||||
| -rw-r--r-- | libclc/generic/lib/shared/min.inc | 6 |
4 files changed, 41 insertions, 0 deletions
diff --git a/libclc/generic/include/clc/integer/gentype.inc b/libclc/generic/include/clc/integer/gentype.inc index dd7d061e3ca..95a37d5a28c 100644 --- a/libclc/generic/include/clc/integer/gentype.inc +++ b/libclc/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/libclc/generic/include/clc/math/gentype.inc b/libclc/generic/include/clc/math/gentype.inc index b525c4b7d12..4ed2151591a 100644 --- a/libclc/generic/include/clc/math/gentype.inc +++ b/libclc/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/libclc/generic/include/clc/shared/min.inc b/libclc/generic/include/clc/shared/min.inc index 3bc98803900..cf3afaf085a 100644 --- a/libclc/generic/include/clc/shared/min.inc +++ b/libclc/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/libclc/generic/lib/shared/min.inc b/libclc/generic/lib/shared/min.inc index b99bc35f7bc..58a22e1b6e2 100644 --- a/libclc/generic/lib/shared/min.inc +++ b/libclc/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 |

