Unverified Commit 0fcca8f9 authored by Adam Cozzette's avatar Adam Cozzette Committed by GitHub

Merge pull request #4018 from acozzette/android-portable-log2-floor

Use the portable version of Log2Floor for Clang with older Android NDK versions
parents 9021f623 63a0afca
...@@ -348,6 +348,13 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) { ...@@ -348,6 +348,13 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) {
} }
#endif #endif
#if defined(GOOGLE_PROTOBUF_OS_NACL) \
|| (defined(__ANDROID__) && defined(__clang__) \
&& (__clang_major__ == 3 && __clang_minor__ == 8) \
&& (__clang_patchlevel__ < 275480))
# define GOOGLE_PROTOBUF_USE_PORTABLE_LOG2
#endif
#if defined(_MSC_VER) #if defined(_MSC_VER)
#define GOOGLE_THREAD_LOCAL __declspec(thread) #define GOOGLE_THREAD_LOCAL __declspec(thread)
#else #else
...@@ -413,12 +420,13 @@ class Bits { ...@@ -413,12 +420,13 @@ class Bits {
} }
static uint32 Log2FloorNonZero64(uint64 n) { static uint32 Log2FloorNonZero64(uint64 n) {
// arm-nacl-clang runs into an instruction-selection failure when it // Older versions of clang run into an instruction-selection failure when
// encounters __builtin_clzll: // it encounters __builtin_clzll:
// https://bugs.chromium.org/p/nativeclient/issues/detail?id=4395 // https://bugs.chromium.org/p/nativeclient/issues/detail?id=4395
// To work around this, when we build for NaCl we use the portable // This includes arm-nacl-clang and clang in older Android NDK versions.
// To work around this, when we build with those we use the portable
// implementation instead. // implementation instead.
#if defined(__GNUC__) && !defined(GOOGLE_PROTOBUF_OS_NACL) #if defined(__GNUC__) && !defined(GOOGLE_PROTOBUF_USE_PORTABLE_LOG2)
return 63 ^ static_cast<uint32>(__builtin_clzll(n)); return 63 ^ static_cast<uint32>(__builtin_clzll(n));
#else #else
return Log2FloorNonZero64_Portable(n); return Log2FloorNonZero64_Portable(n);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment