From 0fd3463974cf8b2aad009ee97dd240222ffd7065 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 26 Jun 2013 18:20:25 +0000 Subject: Implement fmax() and fmin() builtins git-svn-id: https://llvm.org/svn/llvm-project/libclc/trunk@184987 91177308-0d34-0410-b5e6-96231b3b80d8 --- generic/include/clc/clc.h | 2 ++ generic/include/clc/math/binary_decl.inc | 6 ++++++ generic/include/clc/math/fmax.h | 11 +++++++++++ generic/include/clc/math/fmin.h | 11 +++++++++++ generic/include/clc/math/gentype.inc | 4 ++++ generic/lib/SOURCES | 2 ++ generic/lib/math/binary_impl.inc | 18 ++++++++++++++++++ generic/lib/math/fmax.cl | 11 +++++++++++ generic/lib/math/fmin.cl | 11 +++++++++++ 9 files changed, 76 insertions(+) create mode 100644 generic/include/clc/math/binary_decl.inc create mode 100644 generic/include/clc/math/fmax.h create mode 100644 generic/include/clc/math/fmin.h create mode 100644 generic/lib/math/binary_impl.inc create mode 100644 generic/lib/math/fmax.cl create mode 100644 generic/lib/math/fmin.cl diff --git a/generic/include/clc/clc.h b/generic/include/clc/clc.h index 315693b..c917a46 100644 --- a/generic/include/clc/clc.h +++ b/generic/include/clc/clc.h @@ -38,6 +38,8 @@ #include #include #include +#include +#include #include #include #include diff --git a/generic/include/clc/math/binary_decl.inc b/generic/include/clc/math/binary_decl.inc new file mode 100644 index 0000000..1a49e26 --- /dev/null +++ b/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/generic/include/clc/math/fmax.h b/generic/include/clc/math/fmax.h new file mode 100644 index 0000000..d26e5d6 --- /dev/null +++ b/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/generic/include/clc/math/fmin.h b/generic/include/clc/math/fmin.h new file mode 100644 index 0000000..3506aef --- /dev/null +++ b/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/generic/include/clc/math/gentype.inc b/generic/include/clc/math/gentype.inc index 4506920..b525c4b 100644 --- a/generic/include/clc/math/gentype.inc +++ b/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/generic/lib/SOURCES b/generic/lib/SOURCES index d29ca1f..86c008b 100644 --- a/generic/lib/SOURCES +++ b/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/generic/lib/math/binary_impl.inc b/generic/lib/math/binary_impl.inc new file mode 100644 index 0000000..e4b1e5f --- /dev/null +++ b/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/generic/lib/math/fmax.cl b/generic/lib/math/fmax.cl new file mode 100644 index 0000000..68a67ac --- /dev/null +++ b/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/generic/lib/math/fmin.cl b/generic/lib/math/fmin.cl new file mode 100644 index 0000000..cac188e --- /dev/null +++ b/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 -- cgit v1.2.3