From 999a0e200fb7bfe0f72b660fad1d2169afae47b1 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 2 Dec 2020 13:16:45 -0800 Subject: [PATCH] vm: fix log2 for arm64. --- vm/bitwise_hacks.hpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/vm/bitwise_hacks.hpp b/vm/bitwise_hacks.hpp index 5332b8c7b2..ed338dd303 100644 --- a/vm/bitwise_hacks.hpp +++ b/vm/bitwise_hacks.hpp @@ -17,24 +17,31 @@ inline cell log2(cell x) { asm("bsr %1, %0;" : "=r"(n) : "r"(x)); #endif +#elif defined(FACTOR_ARM) +#if defined(_MSC_VER) + _BitScanReverse((unsigned long*)&n, x); +#else + n = (31 - __builtin_clz(x)); +#endif + #elif defined(FACTOR_ARM64) #if defined(_MSC_VER) n = 0; _BitScanReverse64((unsigned long*)&n, x); #else - asm("bsr %1, %0;" : "=r"(n) : "r"(x)); + n = (63 - __builtin_clzll(x)); #endif -#elif defined(FACTOR_PPC64) +#elif defined(FACTOR_PPC32) #if defined(__GNUC__) - n = (63 - __builtin_clzll(x)); + n = (31 - __builtin_clz(x)); #else #error Unsupported compiler #endif -#elif defined(FACTOR_PPC32) +#elif defined(FACTOR_PPC64) #if defined(__GNUC__) - n = (31 - __builtin_clz(x)); + n = (63 - __builtin_clzll(x)); #else #error Unsupported compiler #endif -- 2.34.1