45 using supports_sg_loadstore = std::negation<
46 std::disjunction<tu_ns::is_complex<argT1>, tu_ns::is_complex<argT2>>>;
48 std::conjunction<std::is_same<argT1, argT2>,
49 std::disjunction<std::is_floating_point<argT1>,
50 std::is_same<argT1, sycl::half>>>;
52 resT operator()(
const argT1 &in1,
const argT2 &in2)
const
54 if constexpr (std::is_integral_v<argT1> && std::is_integral_v<argT2>) {
55 return in1 >= in2 ? in1 : in2;
57 else if constexpr (tu_ns::is_complex<argT1>::value &&
58 tu_ns::is_complex<argT2>::value)
60 static_assert(std::is_same_v<argT1, argT2>);
62 using realT =
typename argT1::value_type;
63 const realT in2r = std::real(in2);
64 const realT in2i = std::imag(in2);
66 if (sycl::isnan(in2r) || sycl::isnan(in2i) ||
67 mu_ns::greater_equal_complex<argT1>(in1, in2))
74 return sycl::fmax(in1, in2);
79 sycl::vec<resT, vec_sz>
80 operator()(
const sycl::vec<argT1, vec_sz> &in1,
81 const sycl::vec<argT2, vec_sz> &in2)
const
83 return sycl::fmax(in1, in2);