Improve x32 detection macro.
authorjochen@chromium.org <jochen@chromium.org>
Thu, 11 Sep 2014 08:01:24 +0000 (08:01 +0000)
committerjochen@chromium.org <jochen@chromium.org>
Thu, 11 Sep 2014 08:01:24 +0000 (08:01 +0000)
When targeting the Microsoft ABI in 64bit mode, clang defines __x86_64__ but
doesn't define __LP64__ (Microsoft uses LLP64), so it would fall down the x32
path. cl.exe doesn't define __x86_64__ in the first place, so it didn't have
this problem.

Rather than trying to guess pointer size by looking at __x86_64__ and __LP64__,
check for pointer size directly using __POINTER_SIZE__. This is defined by both
gcc and clang, and eliminiates this problem.

This should fix hundreds of "error(clang): unknown type name 'Atomic64'" when
compiling v8 on Windows with clang for 64 bit.

BUG=chromium:82385
LOG=n
R=haitao.feng@intel.com, jochen@chromium.org

Review URL: https://codereview.chromium.org/560903002

Patch from Nico Weber <thakis@chromium.org>.

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23855 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/base/build_config.h

index 5229ebf..22b944b 100644 (file)
@@ -24,7 +24,7 @@
 #define V8_HOST_CAN_READ_UNALIGNED 1
 #else
 #define V8_HOST_ARCH_X64 1
-#if defined(__x86_64__) && !defined(__LP64__)
+#if defined(__x86_64__) && __SIZEOF_POINTER__ == 4  // Check for x32.
 #define V8_HOST_ARCH_32_BIT 1
 #else
 #define V8_HOST_ARCH_64_BIT 1
@@ -90,7 +90,7 @@
 #define V8_TARGET_ARCH_32_BIT 1
 #elif V8_TARGET_ARCH_X64
 #if !V8_TARGET_ARCH_32_BIT && !V8_TARGET_ARCH_64_BIT
-#if defined(__x86_64__) && !defined(__LP64__)
+#if defined(__x86_64__) && __SIZEOF_POINTER__ == 4  // Check for x32.
 #define V8_TARGET_ARCH_32_BIT 1
 #else
 #define V8_TARGET_ARCH_64_BIT 1