diff --git a/libclc/generic/include/clc/clc.h b/libclc/generic/include/clc/clc.h index 315693bea382..c917a460122d 100644 --- a/libclc/generic/include/clc/clc.h +++ b/libclc/generic/include/clc/clc.h @@ -38,6 +38,8 @@ #include #include #include +#include +#include #include #include #include diff --git a/libclc/generic/include/clc/math/binary_decl.inc b/libclc/generic/include/clc/math/binary_decl.inc new file mode 100644 index 000000000000..1a49e26d096a --- /dev/null +++ b/libclc/generic/include/clc/math/binary_decl.inc @@ -0,0 +1,6 @@ +_CLC_OVERLOAD _CLC_DECL GENTYPE FUNCTION(GENTYPE a, GENTYPE b); +_CLC_OVERLOAD _CLC_DECL GENTYPE FUNCTION(GENTYPE a, float b); + +#ifdef cl_khr_fp64 +_CLC_OVERLOAD _CLC_DECL GENTYPE FUNCTION(GENTYPE a, double b); +#endif diff --git a/libclc/generic/include/clc/math/fmax.h b/libclc/generic/include/clc/math/fmax.h new file mode 100644 index 000000000000..d26e5d6cced9 --- /dev/null +++ b/libclc/generic/include/clc/math/fmax.h @@ -0,0 +1,11 @@ +#undef fmax +#define fmax __clc_fmax + +#define BODY +#define FUNCTION __clc_fmax + +#include + +#undef BODY +#undef FUNCTION + diff --git a/libclc/generic/include/clc/math/fmin.h b/libclc/generic/include/clc/math/fmin.h new file mode 100644 index 000000000000..3506aef88af5 --- /dev/null +++ b/libclc/generic/include/clc/math/fmin.h @@ -0,0 +1,11 @@ +#undef fmin +#define fmin __clc_fmin + +#define BODY +#define FUNCTION __clc_fmin + +#include + +#undef BODY +#undef FUNCTION + diff --git a/libclc/generic/include/clc/math/gentype.inc b/libclc/generic/include/clc/math/gentype.inc index 450692080feb..b525c4b7d123 100644 --- a/libclc/generic/include/clc/math/gentype.inc +++ b/libclc/generic/include/clc/math/gentype.inc @@ -1,6 +1,8 @@ #define GENTYPE float +#define SCALAR #include BODY #undef GENTYPE +#undef SCALAR #define GENTYPE float2 #include BODY @@ -23,9 +25,11 @@ #undef GENTYPE #ifdef cl_khr_fp64 +#define SCALAR #define GENTYPE double #include BODY #undef GENTYPE +#undef SCALAR #define GENTYPE double2 #include BODY diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES index d29ca1f54460..86c008b026f6 100644 --- a/libclc/generic/lib/SOURCES +++ b/libclc/generic/lib/SOURCES @@ -10,6 +10,8 @@ integer/add_sat_impl.ll integer/sub_sat.cl integer/sub_sat.ll integer/sub_sat_impl.ll +math/fmax.cl +math/fmin.cl math/hypot.cl math/mad.cl relational/any.cl diff --git a/libclc/generic/lib/math/binary_impl.inc b/libclc/generic/lib/math/binary_impl.inc new file mode 100644 index 000000000000..e4b1e5ff5159 --- /dev/null +++ b/libclc/generic/lib/math/binary_impl.inc @@ -0,0 +1,18 @@ + +#ifndef SCALAR + +_CLC_OVERLOAD _CLC_DEF GENTYPE FUNCTION(GENTYPE x, GENTYPE y) { + return FUNCTION_IMPL(x, y); +} + +#endif + +_CLC_OVERLOAD _CLC_DEF GENTYPE FUNCTION(GENTYPE x, double y) { + GENTYPE vec_y = (GENTYPE) (y); + return FUNCTION_IMPL(x, vec_y); +} + +_CLC_OVERLOAD _CLC_DEF GENTYPE FUNCTION(GENTYPE x, float y) { + GENTYPE vec_y = (GENTYPE) (y); + return FUNCTION_IMPL(x, vec_y); +} diff --git a/libclc/generic/lib/math/fmax.cl b/libclc/generic/lib/math/fmax.cl new file mode 100644 index 000000000000..68a67acd34cc --- /dev/null +++ b/libclc/generic/lib/math/fmax.cl @@ -0,0 +1,11 @@ +#include + +#ifdef cl_khr_fp64 +#pragma OPENCL EXTENSION cl_khr_fp64 : enable +#endif + +#define FUNCTION __clc_fmax +#define FUNCTION_IMPL(x, y) ((x) < (y) ? (y) : (x)) + +#define BODY +#include diff --git a/libclc/generic/lib/math/fmin.cl b/libclc/generic/lib/math/fmin.cl new file mode 100644 index 000000000000..cac188e94c3f --- /dev/null +++ b/libclc/generic/lib/math/fmin.cl @@ -0,0 +1,11 @@ +#include + +#ifdef cl_khr_fp64 +#pragma OPENCL EXTENSION cl_khr_fp64 : enable +#endif + +#define FUNCTION __clc_fmin +#define FUNCTION_IMPL(x, y) ((y) < (x) ? (y) : (x)) + +#define BODY +#include