50template <
typename OpT,
typename ArgT,
typename ResT>
54 using is_constant =
typename std::false_type;
58 using supports_vec =
typename std::false_type;
60 using supports_sg_loadstore =
typename std::true_type;
62 ResT operator()(
const ArgT &x)
const
64 if constexpr (std::is_same_v<ArgT, sycl::half> &&
65 std::is_same_v<ResT, float>) {
67 return OpT::apply(
float(x));
75#define MACRO_DEFINE_FUNCTOR(__name__, __f_name__) \
76 struct __f_name__##Op \
78 template <typename Tp> \
79 static Tp apply(const Tp &x) \
85 template <typename ArgT, typename ResT> \
86 using __f_name__##Functor = BaseFunctor<__f_name__##Op, ArgT, ResT>;
88MACRO_DEFINE_FUNCTOR(sycl::erf, Erf);
89MACRO_DEFINE_FUNCTOR(sycl::erfc, Erfc);
91#
if defined(__SYCL_EXT_INTEL_MATH_SUPPORT)
92 sycl::ext::intel::math::erfcx,