From 2c4541f735d3dad2ce312bf785c366668d646f3b Mon Sep 17 00:00:00 2001 From: Charles Schlosser Date: Wed, 13 Dec 2023 03:33:49 +0000 Subject: [PATCH] fix msvc clz --- Eigen/src/Core/MathFunctions.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 087d5db2a..0be29bc9a 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -733,10 +733,9 @@ struct count_bits_impl(sizeof(BitsType) * CHAR_BIT); static_assert(std::is_integral::value, "BitsType must be a built-in integer"); static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) { - static constexpr int kLeadingBitsOffset = static_cast((sizeof(unsigned long) - sizeof(BitsType)) * CHAR_BIT); unsigned long out; _BitScanReverse(&out, static_cast(bits)); - return bits == 0 ? kNumBits : static_cast(out - kLeadingBitsOffset); + return bits == 0 ? kNumBits : (kNumBits - 1) - static_cast(out); } static EIGEN_DEVICE_FUNC inline int ctz(BitsType bits) { @@ -754,10 +753,9 @@ struct count_bits_impl< static constexpr int kNumBits = static_cast(sizeof(BitsType) * CHAR_BIT); static_assert(std::is_integral::value, "BitsType must be a built-in integer"); static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) { - static constexpr int kLeadingBitsOffset = static_cast((sizeof(__int64) - sizeof(BitsType)) * CHAR_BIT); unsigned long out; _BitScanReverse64(&out, static_cast(bits)); - return bits == 0 ? kNumBits : static_cast(out - kLeadingBitsOffset); + return bits == 0 ? kNumBits : (kNumBits - 1) - static_cast(out); } static EIGEN_DEVICE_FUNC inline int ctz(BitsType bits) {