aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Khimenko <khim@google.com>2023-12-14 01:36:33 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-12-14 01:36:33 +0000
commit0af29d6b2649821d52a0f126e7b411b4c4d47ea6 (patch)
tree0881ae1933f757f300c194bd4852cc4a60e054d1
parentd316749481670b67e653c8c4eb503e460f219d4e (diff)
parente9ab9928e0e61bf3be6ed3e77f8a036014d5e19e (diff)
downloadbinary_translation-0af29d6b2649821d52a0f126e7b411b4c4d47ea6.tar.gz
Merge "Implement BitUtilLog2 efficiently" into main am: 9ecae22fcf am: e9ab9928e0
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/binary_translation/+/2874095 Change-Id: I0b907a02ec4bf197bec7699cb861677269475447 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--base/include/berberis/base/bit_util.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/base/include/berberis/base/bit_util.h b/base/include/berberis/base/bit_util.h
index e3610dde..4fb08470 100644
--- a/base/include/berberis/base/bit_util.h
+++ b/base/include/berberis/base/bit_util.h
@@ -70,8 +70,9 @@ constexpr bool IsAligned(T* p, size_t align) {
template <typename T>
constexpr T BitUtilLog2(T x) {
static_assert(std::is_integral_v<T>, "Log2: T must be integral");
- DCHECK(IsPowerOf2(x));
- return x == 1 ? 0 : BitUtilLog2(x >> 1) + 1;
+ CHECK(IsPowerOf2(x));
+ // TODO(b/260725458): Use std::countr_zero after C++20 becomes available
+ return __builtin_ctz(x);
}
// Verify that argument value fits into a target.