From: John Benediktsson Date: Wed, 2 Dec 2020 21:16:45 +0000 (-0800) Subject: vm: fix log2 for arm64. X-Git-Tag: 0.99~2862 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=999a0e200fb7bfe0f72b660fad1d2169afae47b1 vm: fix log2 for arm64. --- 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