mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-29 23:32:23 +00:00
util: fix consteval CountTrailingZeroes impl
This commit is contained in:
parent
1c5edaf4fb
commit
d27fe8a229
1 changed files with 3 additions and 0 deletions
|
@ -195,6 +195,7 @@ namespace ams::util {
|
||||||
}
|
}
|
||||||
|
|
||||||
static_assert(CountLeadingZeros(~static_cast<u64>(0)) == 0);
|
static_assert(CountLeadingZeros(~static_cast<u64>(0)) == 0);
|
||||||
|
static_assert(CountLeadingZeros(static_cast<u64>(1) << 5) == BITSIZEOF(u64) - 1 - 5);
|
||||||
static_assert(CountLeadingZeros(static_cast<u64>(0)) == BITSIZEOF(u64));
|
static_assert(CountLeadingZeros(static_cast<u64>(0)) == BITSIZEOF(u64));
|
||||||
|
|
||||||
template<typename T> requires std::integral<T>
|
template<typename T> requires std::integral<T>
|
||||||
|
@ -202,6 +203,7 @@ namespace ams::util {
|
||||||
if (std::is_constant_evaluated()) {
|
if (std::is_constant_evaluated()) {
|
||||||
auto count = 0;
|
auto count = 0;
|
||||||
for (size_t i = 0; i < BITSIZEOF(T) && (x & 1) == 0; ++i) {
|
for (size_t i = 0; i < BITSIZEOF(T) && (x & 1) == 0; ++i) {
|
||||||
|
x >>= 1;
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
|
@ -226,6 +228,7 @@ namespace ams::util {
|
||||||
}
|
}
|
||||||
|
|
||||||
static_assert(CountTrailingZeros(~static_cast<u64>(0)) == 0);
|
static_assert(CountTrailingZeros(~static_cast<u64>(0)) == 0);
|
||||||
|
static_assert(CountTrailingZeros(static_cast<u64>(1) << 5) == 5);
|
||||||
static_assert(CountTrailingZeros(static_cast<u64>(0)) == BITSIZEOF(u64));
|
static_assert(CountTrailingZeros(static_cast<u64>(0)) == BITSIZEOF(u64));
|
||||||
|
|
||||||
template<typename T> requires std::integral<T>
|
template<typename T> requires std::integral<T>
|
||||||
|
|
Loading…
Reference in a new issue