From daced74d777e6b0add8166a07de3f549cb4ca46c Mon Sep 17 00:00:00 2001 From: "pliard@google.com" Date: Tue, 17 Jul 2012 15:51:05 +0000 Subject: Add support for NaCl in atomicops. This does additionally a significant cleanup in platform_macros.h (initially pulled from v8). It implemented some subtleties that we don't use like the HOST/TARGET arch distinction. Changes related to NaCl support come from Chromium's build/build_config.h. BUG=392 --- src/google/protobuf/stubs/platform_macros.h | 89 ++++------------------------- 1 file changed, 12 insertions(+), 77 deletions(-) (limited to 'src/google/protobuf/stubs/platform_macros.h') diff --git a/src/google/protobuf/stubs/platform_macros.h b/src/google/protobuf/stubs/platform_macros.h index 0cda2b4c..cba9fbd0 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_ -- cgit v1.2.3