|
|
|
@ -44,6 +44,8 @@ |
|
|
|
|
#include <stdint.h> |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#include <google/protobuf/stubs/platform_macros.h> |
|
|
|
|
|
|
|
|
|
#undef PROTOBUF_LITTLE_ENDIAN |
|
|
|
|
#ifdef _WIN32 |
|
|
|
|
// Assuming windows is always little-endian.
|
|
|
|
@ -359,7 +361,12 @@ class Bits { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static uint32 Log2FloorNonZero64(uint64 n) { |
|
|
|
|
#if defined(__GNUC__) |
|
|
|
|
// arm-nacl-clang runs into an instruction-selection failure when it
|
|
|
|
|
// encounters __builtin_clzll:
|
|
|
|
|
// https://bugs.chromium.org/p/nativeclient/issues/detail?id=4395
|
|
|
|
|
// To work around this, when we build for NaCl we use the portable
|
|
|
|
|
// implementation instead.
|
|
|
|
|
#if defined(__GNUC__) && !defined(GOOGLE_PROTOBUF_OS_NACL) |
|
|
|
|
return 63 ^ __builtin_clzll(n); |
|
|
|
|
#else |
|
|
|
|
return Log2FloorNonZero64_Portable(n); |
|
|
|
|