diff options
| author | Aaron Watry <awatry@gmail.com> | 2016-02-08 17:07:21 +0000 |
|---|---|---|
| committer | Aaron Watry <awatry@gmail.com> | 2016-02-08 17:07:21 +0000 |
| commit | 8872800effb4d38cc6b1c7802edafc2bd80e101c (patch) | |
| tree | 7b648f98f5c7b10ec16b7ac35ea01cd893198f06 /libclc/generic/include/clc | |
| parent | ff9d83ceb383ca782bad26857123d37dc947d363 (diff) | |
| download | bcm5719-llvm-8872800effb4d38cc6b1c7802edafc2bd80e101c.tar.gz bcm5719-llvm-8872800effb4d38cc6b1c7802edafc2bd80e101c.zip | |
math: Add frexp ported from amd-builtins
The float implementation is almost a direct port from the amd-builtins,
but instead of just having a scalar and float4 implementation, it has
a scalar and arbitrary width vector implementation.
The double scalar is also a direct port from AMD's builtin release.
The double vector implementation copies the logic in the float vector
implementation using the values from the double scalar version.
Both have been tested in piglit using tests sent to that project's
mailing list.
Signed-off-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Jan Vesely <jan.vesely@rutgers.edu>
llvm-svn: 260114
Diffstat (limited to 'libclc/generic/include/clc')
| -rw-r--r-- | libclc/generic/include/clc/clc.h | 1 | ||||
| -rw-r--r-- | libclc/generic/include/clc/math/frexp.h | 2 | ||||
| -rw-r--r-- | libclc/generic/include/clc/math/frexp.inc | 3 | ||||
| -rw-r--r-- | libclc/generic/include/clc/math/gentype.inc | 24 |
4 files changed, 30 insertions, 0 deletions
diff --git a/libclc/generic/include/clc/clc.h b/libclc/generic/include/clc/clc.h index bd2f67f7799..4060ea1bec3 100644 --- a/libclc/generic/include/clc/clc.h +++ b/libclc/generic/include/clc/clc.h @@ -58,6 +58,7 @@ #include <clc/math/fmin.h> #include <clc/math/fmod.h> #include <clc/math/fract.h> +#include <clc/math/frexp.h> #include <clc/math/half_rsqrt.h> #include <clc/math/half_sqrt.h> #include <clc/math/hypot.h> diff --git a/libclc/generic/include/clc/math/frexp.h b/libclc/generic/include/clc/math/frexp.h new file mode 100644 index 00000000000..dda23da3f7f --- /dev/null +++ b/libclc/generic/include/clc/math/frexp.h @@ -0,0 +1,2 @@ +#define __CLC_BODY <clc/math/frexp.inc> +#include <clc/math/gentype.inc> diff --git a/libclc/generic/include/clc/math/frexp.inc b/libclc/generic/include/clc/math/frexp.inc new file mode 100644 index 00000000000..2a6f7f58239 --- /dev/null +++ b/libclc/generic/include/clc/math/frexp.inc @@ -0,0 +1,3 @@ +_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE frexp(__CLC_GENTYPE x, global __CLC_INTN *iptr); +_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE frexp(__CLC_GENTYPE x, local __CLC_INTN *iptr); +_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE frexp(__CLC_GENTYPE x, private __CLC_INTN *iptr); diff --git a/libclc/generic/include/clc/math/gentype.inc b/libclc/generic/include/clc/math/gentype.inc index 41eb4117194..e6ffad104b5 100644 --- a/libclc/generic/include/clc/math/gentype.inc +++ b/libclc/generic/include/clc/math/gentype.inc @@ -2,38 +2,50 @@ #define __CLC_FPSIZE 32 #define __CLC_GENTYPE float +#define __CLC_INTN int #define __CLC_SCALAR #include __CLC_BODY #undef __CLC_GENTYPE +#undef __CLC_INTN #undef __CLC_SCALAR #define __CLC_GENTYPE float2 #define __CLC_INTN int2 +#define __CLC_VECSIZE 2 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE float3 #define __CLC_INTN int3 +#define __CLC_VECSIZE 3 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE float4 #define __CLC_INTN int4 +#define __CLC_VECSIZE 4 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE float8 #define __CLC_INTN int8 +#define __CLC_VECSIZE 8 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE float16 #define __CLC_INTN int16 +#define __CLC_VECSIZE 16 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN @@ -47,37 +59,49 @@ #define __CLC_SCALAR #define __CLC_GENTYPE double +#define __CLC_INTN int #include __CLC_BODY #undef __CLC_GENTYPE +#undef __CLC_INTN #undef __CLC_SCALAR #define __CLC_GENTYPE double2 #define __CLC_INTN int2 +#define __CLC_VECSIZE 2 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE double3 #define __CLC_INTN int3 +#define __CLC_VECSIZE 3 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE double4 #define __CLC_INTN int4 +#define __CLC_VECSIZE 4 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE double8 #define __CLC_INTN int8 +#define __CLC_VECSIZE 8 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN #define __CLC_GENTYPE double16 #define __CLC_INTN int16 +#define __CLC_VECSIZE 16 #include __CLC_BODY +#undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_INTN |

