47template <
typename OpT,
typename ArgT,
typename ResT>
51 using is_constant =
typename std::false_type;
55 using supports_vec =
typename std::false_type;
57 using supports_sg_loadstore =
typename std::true_type;
59 ResT operator()(
const ArgT &x)
const
61 if constexpr (std::is_same_v<ArgT, sycl::half> &&
62 std::is_same_v<ResT, float>) {
64 return OpT::apply(
float(x));
72#define MACRO_DEFINE_FUNCTOR(__name__, __f_name__) \
73 struct __f_name__##Op \
75 template <typename Tp> \
76 static Tp apply(const Tp &x) \
82 template <typename ArgT, typename ResT> \
83 using __f_name__##Functor = BaseFunctor<__f_name__##Op, ArgT, ResT>;
85MACRO_DEFINE_FUNCTOR(sycl::erf, Erf);
86MACRO_DEFINE_FUNCTOR(sycl::erfc, Erfc);
88#
if defined(__SYCL_EXT_INTEL_MATH_SUPPORT)
89 sycl::ext::intel::math::erfcx,