From b25b721a6a85559971ef466703121d633a00ff41 Mon Sep 17 00:00:00 2001 From: SachinVin Date: Fri, 24 Apr 2020 21:23:38 +0530 Subject: [PATCH] a64_emiter: CountLeadingZeros intrinsic shortcuts --- src/backend/A64/emitter/a64_emitter.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/A64/emitter/a64_emitter.cpp b/src/backend/A64/emitter/a64_emitter.cpp index efdd5ffc..0718afb6 100644 --- a/src/backend/A64/emitter/a64_emitter.cpp +++ b/src/backend/A64/emitter/a64_emitter.cpp @@ -22,7 +22,16 @@ const int kWRegSizeInBits = 32; const int kXRegSizeInBits = 64; // The below few functions are taken from V8. -int CountLeadingZeros(uint64_t value, int width) { +int CountLeadingZeros(u64 value, int width) { +#ifdef _MSC_VER + if (width == 64) { + return _CountLeadingZeros64(value); + } +#else + if (width == 64) { + return __builtin_clzll(value); + } +#endif // TODO(jbramley): Optimize this for ARM64 hosts. int count = 0; uint64_t bit_test = 1ULL << (width - 1);