diff options
author | Aaron Watry <awatry@gmail.com> | 2013-04-16 18:48:04 -0500 |
---|---|---|
committer | Aaron Watry <awatry@gmail.com> | 2013-04-16 18:48:04 -0500 |
commit | fbb4198b6ea4e5b6946dba9b003bd79304c091b5 (patch) | |
tree | 0377aef6d731d51590a3ec19516689dd8a81c7b4 /generic | |
parent | c54e23e40661c40e4da407a00c9c381dfd65716e (diff) |
libclc: add mad24() implementation
The spec requires the first 2 inputs to be within the bounds of a 24-bit
integer's possible values. If they're not, then results are implementation
defined.
Diffstat (limited to 'generic')
-rw-r--r-- | generic/include/clc/clc.h | 1 | ||||
-rw-r--r-- | generic/include/clc/integer/mad24.h | 25 | ||||
-rw-r--r-- | generic/lib/SOURCES | 1 | ||||
-rw-r--r-- | generic/lib/integer/mad24.cl | 55 | ||||
-rw-r--r-- | generic/lib/integer/mad24.inc | 3 |
5 files changed, 85 insertions, 0 deletions
diff --git a/generic/include/clc/clc.h b/generic/include/clc/clc.h index d2858a8..746a301 100644 --- a/generic/include/clc/clc.h +++ b/generic/include/clc/clc.h @@ -64,6 +64,7 @@ #include <clc/integer/abs_diff.h> #include <clc/integer/add_sat.h> #include <clc/integer/clz.h> +#include <clc/integer/mad24.h> #include <clc/integer/rotate.h> #include <clc/integer/sub_sat.h> diff --git a/generic/include/clc/integer/mad24.h b/generic/include/clc/integer/mad24.h new file mode 100644 index 0000000..05ec86b --- /dev/null +++ b/generic/include/clc/integer/mad24.h @@ -0,0 +1,25 @@ + +_CLC_OVERLOAD _CLC_DECL int mad24(int x, int y, int z); + +_CLC_OVERLOAD _CLC_DECL int2 mad24(int2 x, int2 y, int2 z); + +_CLC_OVERLOAD _CLC_DECL int3 mad24(int3 x, int3 y, int3 z); + +_CLC_OVERLOAD _CLC_DECL int4 mad24(int4 x, int4 y, int4 z); + +_CLC_OVERLOAD _CLC_DECL int8 mad24(int8 x, int8 y, int8 z); + +_CLC_OVERLOAD _CLC_DECL int16 mad24(int16 x, int16 y, int16 z); + +_CLC_OVERLOAD _CLC_DECL uint mad24(uint x, uint y, uint z); + +_CLC_OVERLOAD _CLC_DECL uint2 mad24(uint2 x, uint2 y, uint2 z); + +_CLC_OVERLOAD _CLC_DECL uint3 mad24(uint3 x, uint3 y, uint3 z); + +_CLC_OVERLOAD _CLC_DECL uint4 mad24(uint4 x, uint4 y, uint4 z); + +_CLC_OVERLOAD _CLC_DECL uint8 mad24(uint8 x, uint8 y, uint8 z); + +_CLC_OVERLOAD _CLC_DECL uint16 mad24(uint16 x, uint16 y, uint16 z); + diff --git a/generic/lib/SOURCES b/generic/lib/SOURCES index 59eb9bb..ce9f638 100644 --- a/generic/lib/SOURCES +++ b/generic/lib/SOURCES @@ -11,6 +11,7 @@ integer/add_sat_impl.ll integer/clz.cl integer/clz_if.ll integer/clz_impl.ll +integer/mad24.cl integer/rotate.cl integer/sub_sat.cl integer/sub_sat_if.ll diff --git a/generic/lib/integer/mad24.cl b/generic/lib/integer/mad24.cl new file mode 100644 index 0000000..bed5b79 --- /dev/null +++ b/generic/lib/integer/mad24.cl @@ -0,0 +1,55 @@ +#include <clc/clc.h> + + +#define BODY <mad24.inc> + +#define GENTYPE int +#include BODY +#undef GENTYPE + +#define GENTYPE int2 +#include BODY +#undef GENTYPE + +#define GENTYPE int3 +#include BODY +#undef GENTYPE + +#define GENTYPE int4 +#include BODY +#undef GENTYPE + +#define GENTYPE int8 +#include BODY +#undef GENTYPE + +#define GENTYPE int16 +#include BODY +#undef GENTYPE + +#define GENTYPE uint +#include BODY +#undef GENTYPE + +#define GENTYPE uint2 +#include BODY +#undef GENTYPE + +#define GENTYPE uint3 +#include BODY +#undef GENTYPE + +#define GENTYPE uint4 +#include BODY +#undef GENTYPE + +#define GENTYPE uint8 +#include BODY +#undef GENTYPE + +#define GENTYPE uint16 +#include BODY +#undef GENTYPE + + +#undef BODY diff --git a/generic/lib/integer/mad24.inc b/generic/lib/integer/mad24.inc new file mode 100644 index 0000000..f2bf91e --- /dev/null +++ b/generic/lib/integer/mad24.inc @@ -0,0 +1,3 @@ +_CLC_OVERLOAD _CLC_DEF GENTYPE mad24(GENTYPE x, GENTYPE y, GENTYPE z) { + return x * y + z; +} |