16 template<
typename T_Arg>
21 if constexpr(
sizeof(T_Arg) == 4u)
23 return std::popcount(std::bit_cast<unsigned int>(val));
25 else if constexpr(
sizeof(T_Arg) == 8u)
27 return std::popcount(std::bit_cast<unsigned long long>(val));
30 static_assert(!
sizeof(T_Arg),
"Unsupported data type, sizeof() must be 4 or 8");
36 template<
typename T_Arg>
41 if constexpr(
sizeof(T_Arg) == 4u)
43 auto value = std::bit_cast<unsigned int>(val);
44 return value == 0u ? 0u : std::countr_zero(value) + 1;
46 else if constexpr(
sizeof(T_Arg) == 8u)
48 auto value = std::bit_cast<unsigned long long>(val);
49 return value == 0u ? 0 : std::countr_zero(value) + 1;
52 static_assert(!
sizeof(T_Arg),
"Unsupported data type, sizeof() must be 4 or 8");
58 template<
typename T_Arg>
63 if constexpr(
sizeof(T_Arg) == 4u)
65 return std::countl_zero(std::bit_cast<unsigned int>(val));
67 else if constexpr(
sizeof(T_Arg) == 8u)
69 return std::countl_zero(std::bit_cast<unsigned long long>(val));
72 static_assert(!
sizeof(T_Arg),
"Unsupported data type, sizeof() must be 4 or 8");
#define ALPAKA_UNREACHABLE(...)
Before CUDA 11.5 nvcc is unable to correctly identify return statements in 'if constexpr' branches....
constexpr auto operator()(alpaka::internal::StlIntrinsic const, T_Arg const &val) const
constexpr auto operator()(alpaka::internal::StlIntrinsic const, T_Arg const &val) const
constexpr auto operator()(alpaka::internal::StlIntrinsic const, T_Arg const &val) const