diff --git a/src/google/protobuf/stubs/atomicops.h b/src/google/protobuf/stubs/atomicops.h index d452a054d2..1315682095 100644 --- a/src/google/protobuf/stubs/atomicops.h +++ b/src/google/protobuf/stubs/atomicops.h @@ -63,12 +63,12 @@ namespace protobuf { namespace internal { typedef int32 Atomic32; -#ifdef GOOGLE_PROTOBUF_HOST_ARCH_64_BIT +#ifdef GOOGLE_PROTOBUF_ARCH_64_BIT // We need to be able to go between Atomic64 and AtomicWord implicitly. This // means Atomic64 and AtomicWord should be the same type on 64-bit. -#if defined(__APPLE__) -// MacOS is an exception to the implicit conversion rule above, -// because it uses long for intptr_t. +#if defined(GOOGLE_PROTOBUF_OS_NACL) +// NaCl's intptr_t is not actually 64-bits on 64-bit! +// http://code.google.com/p/nativeclient/issues/detail?id=1162 typedef int64 Atomic64; #else typedef intptr_t Atomic64; @@ -130,7 +130,7 @@ Atomic32 Acquire_Load(volatile const Atomic32* ptr); Atomic32 Release_Load(volatile const Atomic32* ptr); // 64-bit atomic operations (only available on 64-bit processors). -#ifdef GOOGLE_PROTOBUF_HOST_ARCH_64_BIT +#ifdef GOOGLE_PROTOBUF_ARCH_64_BIT Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, Atomic64 old_value, Atomic64 new_value); @@ -150,7 +150,7 @@ void Release_Store(volatile Atomic64* ptr, Atomic64 value); Atomic64 NoBarrier_Load(volatile const Atomic64* ptr); Atomic64 Acquire_Load(volatile const Atomic64* ptr); Atomic64 Release_Load(volatile const Atomic64* ptr); -#endif // GOOGLE_PROTOBUF_HOST_ARCH_64_BIT +#endif // GOOGLE_PROTOBUF_ARCH_64_BIT } // namespace internal } // namespace protobuf @@ -162,8 +162,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr); // MSVC. #if defined(_MSC_VER) -#if defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32) || \ - defined(GOOGLE_PROTOBUF_HOST_ARCH_X64) +#if defined(GOOGLE_PROTOBUF_ARCH_IA32) || defined(GOOGLE_PROTOBUF_ARCH_X64) #include #else GOOGLE_PROTOBUF_ATOMICOPS_ERROR @@ -175,12 +174,11 @@ GOOGLE_PROTOBUF_ATOMICOPS_ERROR // GCC. #elif defined(__GNUC__) -#if defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32) || \ - defined(GOOGLE_PROTOBUF_HOST_ARCH_X64) +#if defined(GOOGLE_PROTOBUF_ARCH_IA32) || defined(GOOGLE_PROTOBUF_ARCH_X64) #include -#elif defined(GOOGLE_PROTOBUF_HOST_ARCH_ARM) +#elif defined(GOOGLE_PROTOBUF_ARCH_ARM) #include -#elif defined(GOOGLE_PROTOBUF_HOST_ARCH_MIPS) +#elif defined(GOOGLE_PROTOBUF_ARCH_MIPS) #include #else GOOGLE_PROTOBUF_ATOMICOPS_ERROR diff --git a/src/google/protobuf/stubs/platform_macros.h b/src/google/protobuf/stubs/platform_macros.h index 0cda2b4c09..cba9fbd029 100644 --- a/src/google/protobuf/stubs/platform_macros.h +++ b/src/google/protobuf/stubs/platform_macros.h @@ -38,92 +38,27 @@ // http://www.agner.org/optimize/calling_conventions.pdf // or with gcc, run: "echo | gcc -E -dM -" #if defined(_M_X64) || defined(__x86_64__) -#define GOOGLE_PROTOBUF_HOST_ARCH_X64 1 -#define GOOGLE_PROTOBUF_HOST_ARCH_64_BIT 1 -#define GOOGLE_PROTOBUF_HOST_CAN_READ_UNALIGNED 1 +#define GOOGLE_PROTOBUF_ARCH_X64 1 +#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 #elif defined(_M_IX86) || defined(__i386__) -#define GOOGLE_PROTOBUF_HOST_ARCH_IA32 1 -#define GOOGLE_PROTOBUF_HOST_ARCH_32_BIT 1 -#define GOOGLE_PROTOBUF_HOST_CAN_READ_UNALIGNED 1 +#define GOOGLE_PROTOBUF_ARCH_IA32 1 +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 #elif defined(__ARMEL__) -#define GOOGLE_PROTOBUF_HOST_ARCH_ARM 1 -#define GOOGLE_PROTOBUF_HOST_ARCH_32_BIT 1 -// Some CPU-OS combinations allow unaligned access on ARM. We assume -// that unaligned accesses are not allowed unless the build system -// defines the CAN_USE_UNALIGNED_ACCESSES macro to be non-zero. -#if CAN_USE_UNALIGNED_ACCESSES -#define GOOGLE_PROTOBUF_HOST_CAN_READ_UNALIGNED 1 -#endif +#define GOOGLE_PROTOBUF_ARCH_ARM 1 +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 #elif defined(__MIPSEL__) -#define GOOGLE_PROTOBUF_HOST_ARCH_MIPS 1 -#define GOOGLE_PROTOBUF_HOST_ARCH_32_BIT 1 +#define GOOGLE_PROTOBUF_ARCH_MIPS 1 +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +#elif defined(__pnacl__) +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 #else #error Host architecture was not detected as supported by protobuf #endif -// Target architecture detection. This may be set externally. If not, detect -// in the same way as the host architecture, that is, target the native -// environment as presented by the compiler. -#if !defined(GOOGLE_PROTOBUF_TARGET_ARCH_X64) && \ - !defined(GOOGLE_PROTOBUF_TARGET_ARCH_IA32) && \ - !defined(GOOGLE_PROTOBUF_TARGET_ARCH_ARM) && \ - !defined(GOOGLE_PROTOBUF_TARGET_ARCH_MIPS) -#if defined(_M_X64) || defined(__x86_64__) -#define GOOGLE_PROTOBUF_TARGET_ARCH_X64 1 -#elif defined(_M_IX86) || defined(__i386__) -#define GOOGLE_PROTOBUF_TARGET_ARCH_IA32 1 -#elif defined(__ARMEL__) -#define GOOGLE_PROTOBUF_TARGET_ARCH_ARM 1 -#elif defined(__MIPSEL__) -#define GOOGLE_PROTOBUF_TARGET_ARCH_MIPS 1 -#else -#error Target architecture was not detected as supported by protobuf -#endif -#endif - -// Check for supported combinations of host and target architectures. -#if defined(GOOGLE_PROTOBUF_TARGET_ARCH_IA32) && \ - !defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32) -#error Target architecture ia32 is only supported on ia32 host -#endif -#if defined(GOOGLE_PROTOBUF_TARGET_ARCH_X64) && \ - !defined(GOOGLE_PROTOBUF_HOST_ARCH_X64) -#error Target architecture x64 is only supported on x64 host -#endif -#if (defined(GOOGLE_PROTOBUF_TARGET_ARCH_ARM) && \ - !(defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32) || \ - defined(GOOGLE_PROTOBUF_HOST_ARCH_ARM))) -#error Target architecture arm is only supported on arm and ia32 host -#endif -#if (defined(GOOGLE_PROTOBUF_TARGET_ARCH_MIPS) && \ - !(defined(GOOGLE_PROTOBUF_HOST_ARCH_IA32) || \ - defined(GOOGLE_PROTOBUF_HOST_ARCH_MIPS))) -#error Target architecture mips is only supported on mips and ia32 host -#endif - -// Define unaligned read for the target architectures supporting it. -#if defined(GOOGLE_PROTOBUF_TARGET_ARCH_X64) || \ - defined(GOOGLE_PROTOBUF_TARGET_ARCH_IA32) -#define GOOGLE_PROTOBUF_TARGET_CAN_READ_UNALIGNED 1 -#elif GOOGLE_PROTOBUF_TARGET_ARCH_ARM -// Some CPU-OS combinations allow unaligned access on ARM. We assume -// that unaligned accesses are not allowed unless the build system -// defines the CAN_USE_UNALIGNED_ACCESSES macro to be non-zero. -#if CAN_USE_UNALIGNED_ACCESSES -#define GOOGLE_PROTOBUF_TARGET_CAN_READ_UNALIGNED 1 -#endif -#elif GOOGLE_PROTOBUF_TARGET_ARCH_MIPS -#else -#error Target architecture is not supported by protobuf -#endif - -#if (defined(__APPLE__) && defined(__MACH__)) || \ - defined(__FreeBSD__) || defined(__OpenBSD__) -#define GOOGLE_PROTOBUF_USING_BSD_ABI -#endif - #if defined(__APPLE__) #define GOOGLE_PROTOBUF_OS_APPLE +#elif defined(__native_client__) +#define GOOGLE_PROTOBUF_OS_NACL #endif #endif // GOOGLE_PROTOBUF_PLATFORM_MACROS_H_