42 using supports_sg_loadstore = std::negation<
43 std::disjunction<tu_ns::is_complex<argT1>, tu_ns::is_complex<argT2>>>;
45 std::conjunction<std::is_same<argT1, argT2>,
46 std::disjunction<std::is_floating_point<argT1>,
47 std::is_same<argT1, sycl::half>>>;
49 resT operator()(
const argT1 &in1,
const argT2 &in2)
const
51 if constexpr (std::is_integral_v<argT1> && std::is_integral_v<argT2>) {
52 return in1 <= in2 ? in1 : in2;
54 else if constexpr (tu_ns::is_complex<argT1>::value &&
55 tu_ns::is_complex<argT2>::value)
57 static_assert(std::is_same_v<argT1, argT2>);
59 using realT =
typename argT1::value_type;
60 const realT in2r = std::real(in2);
61 const realT in2i = std::imag(in2);
63 if (sycl::isnan(in2r) || sycl::isnan(in2i) ||
64 mu_ns::less_equal_complex<argT1>(in1, in2))
71 return sycl::fmin(in1, in2);
76 sycl::vec<resT, vec_sz>
77 operator()(
const sycl::vec<argT1, vec_sz> &in1,
78 const sycl::vec<argT2, vec_sz> &in2)
const
80 return sycl::fmin(in1, in2);