Skip to content

Commit

Permalink
Merge pull request #9 from jason7708/main
Browse files Browse the repository at this point in the history
[mph] fix pext algorithm when BMI2 is not available
  • Loading branch information
kris-jusiak authored Sep 24, 2024
2 parents 81c6c0c + ed0ca78 commit 6f51c3d
Showing 1 changed file with 10 additions and 12 deletions.
22 changes: 10 additions & 12 deletions mph
Original file line number Diff line number Diff line change
Expand Up @@ -840,19 +840,17 @@ template<class T, T size = sizeof(T) * __CHAR_BIT__>
}
return result;
}();
return (((a & mask) * coefficient) >> nbits) & ((T(1) << mbits) - T(1));
} else if (__builtin_is_constant_evaluated()) {
T result{};
T m = mask;
auto k = 0u;
for (T i{}; i < size; ++i) {
if (m & 1) result |= ((a >> i) & 1) << k++;
m >>= 1;
}
return result;
} else {
__builtin_unreachable();
if constexpr(constexpr auto final_mask = ((T(1) << mbits) - T(1)); ((((mask) * coefficient) >> nbits) & final_mask) == final_mask)
return (((a & mask) * coefficient) >> nbits) & final_mask;
}
T result{};
T m = mask;
auto k = 0u;
for (T i{}; i < size; ++i) {
if (m & 1) result |= ((a >> i) & 1) << k++;
m >>= 1;
}
return result;
}

template<class T, u32 N = 1u>
Expand Down

0 comments on commit 6f51c3d

Please sign in to comment.