Index: src/globals.h |
=================================================================== |
--- src/globals.h (revision 15486) |
+++ src/globals.h (working copy) |
@@ -79,7 +79,11 @@ |
#define V8_HOST_CAN_READ_UNALIGNED 1 |
#else |
#define V8_HOST_ARCH_X64 1 |
+#if defined(__x86_64__) && !defined(__LP64__) |
+#define V8_HOST_ARCH_32_BIT 1 |
+#else |
#define V8_HOST_ARCH_64_BIT 1 |
+#endif // defined(__x86_64__) && !defined(__LP64__) |
#define V8_HOST_CAN_READ_UNALIGNED 1 |
#endif // __native_client__ |
#elif defined(_M_IX86) || defined(__i386__) |
@@ -105,8 +109,8 @@ |
// 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 !V8_TARGET_ARCH_X64 && !V8_TARGET_ARCH_IA32 && \ |
- !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_MIPS |
+#if !V8_TARGET_ARCH_X64 && !V8_TARGET_ARCH_IA32 && !V8_TARGET_ARCH_ARM && \ |
+ !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_X32 |
#if defined(_M_X64) || defined(__x86_64__) |
#define V8_TARGET_ARCH_X64 1 |
#elif defined(_M_IX86) || defined(__i386__) |
@@ -127,6 +131,9 @@ |
#if V8_TARGET_ARCH_X64 && !V8_HOST_ARCH_X64 |
#error Target architecture x64 is only supported on x64 host |
#endif |
+#if (V8_TARGET_ARCH_X32 && !V8_HOST_ARCH_X64 && !V8_HOST_ARCH_32_BIT) |
+#error Target architecture x32 is only supported on x64 host with x32 support |
+#endif |
#if (V8_TARGET_ARCH_ARM && !(V8_HOST_ARCH_IA32 || V8_HOST_ARCH_ARM)) |
#error Target architecture arm is only supported on arm and ia32 host |
#endif |
@@ -151,6 +158,8 @@ |
#define V8_TARGET_LITTLE_ENDIAN 1 |
#elif V8_TARGET_ARCH_X64 |
#define V8_TARGET_LITTLE_ENDIAN 1 |
+#elif V8_TARGET_ARCH_X32 |
+#define V8_TARGET_LITTLE_ENDIAN 1 |
#elif V8_TARGET_ARCH_ARM |
#define V8_TARGET_LITTLE_ENDIAN 1 |
#elif V8_TARGET_ARCH_MIPS |
@@ -200,6 +209,10 @@ |
#define V8_PTR_PREFIX "l" |
#endif |
#else // V8_HOST_ARCH_64_BIT |
+#if V8_TARGET_ARCH_X32 |
+#define V8_UINT64_C(x) (x ## ULL) |
+#define V8_INT64_C(x) (x ## LL) |
+#endif |
#define V8_INTPTR_C(x) (x) |
#define V8_PTR_PREFIX "" |
#endif // V8_HOST_ARCH_64_BIT |
@@ -241,13 +254,16 @@ |
const int kDoubleSize = sizeof(double); // NOLINT |
const int kIntptrSize = sizeof(intptr_t); // NOLINT |
const int kPointerSize = sizeof(void*); // NOLINT |
+#if V8_TARGET_ARCH_X32 |
+const int kHWRegSize = kPointerSize + kPointerSize; |
danno
2013/07/17 13:33:21
You should define the following for all platforms
|
+#endif |
const int kDoubleSizeLog2 = 3; |
// Size of the state of a the random number generator. |
const int kRandomStateSize = 2 * kIntSize; |
-#if V8_HOST_ARCH_64_BIT |
+#if V8_HOST_ARCH_64_BIT && !V8_TARGET_ARCH_X32 |
const int kPointerSizeLog2 = 3; |
const intptr_t kIntptrSignBit = V8_INT64_C(0x8000000000000000); |
const uintptr_t kUintptrAllBitsSet = V8_UINT64_C(0xFFFFFFFFFFFFFFFF); |