14namespace alpaka::internal::intrinsic
16 template<
typename T_Arg>
17 struct Popcount::Op<
alpaka::internal::StlIntrinsic, T_Arg>
19 constexpr auto operator()(alpaka::internal::StlIntrinsic
const, T_Arg
const& val)
const
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>
37 struct Ffs::Op<
alpaka::internal::StlIntrinsic, T_Arg>
39 constexpr auto operator()(alpaka::internal::StlIntrinsic
const, T_Arg
const& val)
const
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>
59 struct Clz::Op<
alpaka::internal::StlIntrinsic, T_Arg>
61 constexpr auto operator()(alpaka::internal::StlIntrinsic
const, T_Arg
const& val)
const
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....