51template <
typename OpT,
typename ArgT,
typename ResT>
55 using is_constant =
typename std::false_type;
59 using supports_vec =
typename std::false_type;
61 using supports_sg_loadstore =
typename std::true_type;
63 ResT operator()(
const ArgT &x)
const
65 if constexpr (std::is_same_v<ArgT, sycl::half> &&
66 std::is_same_v<ResT, float>) {
68 return OpT::apply(
float(x));
76#define MACRO_DEFINE_FUNCTOR(__name__, __f_name__) \
77 struct __f_name__##Op \
79 template <typename Tp> \
80 static Tp apply(const Tp &x) \
86 template <typename ArgT, typename ResT> \
87 using __f_name__##Functor = BaseFunctor<__f_name__##Op, ArgT, ResT>;
89#if defined(__SYCL_EXT_INTEL_MATH_SUPPORT)
90using namespace sycl::ext::intel::math;
95MACRO_DEFINE_FUNCTOR(sycl::erf, Erf);
96MACRO_DEFINE_FUNCTOR(sycl::erfc, Erfc);
97MACRO_DEFINE_FUNCTOR(erfcx, Erfcx);
98MACRO_DEFINE_FUNCTOR(erfinv, Erfinv);
99MACRO_DEFINE_FUNCTOR(erfcinv, Erfcinv);