Index: src/globals.h |
=================================================================== |
--- src/globals.h (revision 1843) |
+++ src/globals.h (working copy) |
@@ -28,25 +28,6 @@ |
#ifndef V8_GLOBALS_H_ |
#define V8_GLOBALS_H_ |
-// ----------------------------------------------------------------------------- |
-// Types |
-// Visual Studio C++ is missing the stdint.h header file. Instead we define |
-// standard integer types for Windows here. |
- |
-#ifdef _MSC_VER |
-typedef signed char int8_t; |
-typedef unsigned char uint8_t; |
-typedef short int16_t; // NOLINT |
-typedef unsigned short uint16_t; // NOLINT |
-typedef int int32_t; |
-typedef unsigned int uint32_t; |
-typedef __int64 int64_t; |
-typedef unsigned __int64 uint64_t; |
-#else // _MSC_VER |
-#include <stdint.h> // for intptr_t |
-#endif // _MSC_VER |
- |
- |
namespace v8 { namespace internal { |
// Support for alternative bool type. This is only enabled if the code is |
@@ -69,9 +50,18 @@ |
typedef uint8_t byte; |
typedef byte* Address; |
+// Define macros for writing 64-bit constants and pointer-size constants. |
+#ifdef _MSC_VER |
+#define UINT64_C(x) (x ## UI64) |
+#define INT64_C(x) (x ## I64) |
+#else |
+#define UINT64_C(x) (x ## ULL) |
+#define INT64_C(x) (x ## LL) |
Dean McNamee
2009/05/04 16:09:52
We should use our own names here.
Also, the stdin
|
+#endif |
+ |
// Code-point values in Unicode 4.0 are 21 bits wide. |
typedef uint16_t uc16; |
-typedef signed int uc32; |
+typedef int32_t uc32; |
#if defined(V8_ARCH_IA32) || defined(V8_ARCH_X64) |
#define CAN_READ_UNALIGNED 1 |
@@ -94,29 +84,33 @@ |
const int kDoubleSize = sizeof(double); // NOLINT |
const int kPointerSize = sizeof(void*); // NOLINT |
+#ifdef V8_ARCH_X64 |
iposva
2009/05/04 17:00:55
There are potentially other 64-bit architectures o
|
+const int kPointerSizeLog2 = 3; |
+#else |
const int kPointerSizeLog2 = 2; |
+#endif |
-const int kObjectAlignmentBits = 2; |
-const int kObjectAlignmentMask = (1 << kObjectAlignmentBits) - 1; |
-const int kObjectAlignment = 1 << kObjectAlignmentBits; |
+const int kObjectAlignmentBits = kPointerSizeLog2; |
+const intptr_t kObjectAlignmentMask = (1 << kObjectAlignmentBits) - 1; |
+const intptr_t kObjectAlignment = 1 << kObjectAlignmentBits; |
// Tag information for HeapObject. |
const int kHeapObjectTag = 1; |
const int kHeapObjectTagSize = 2; |
-const int kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; |
+const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; |
// Tag information for Smi. |
const int kSmiTag = 0; |
const int kSmiTagSize = 1; |
-const int kSmiTagMask = (1 << kSmiTagSize) - 1; |
+const intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1; |
// Tag information for Failure. |
const int kFailureTag = 3; |
const int kFailureTagSize = 2; |
-const int kFailureTagMask = (1 << kFailureTagSize) - 1; |
+const intptr_t kFailureTagMask = (1 << kFailureTagSize) - 1; |
const int kBitsPerByte = 8; |
@@ -125,12 +119,22 @@ |
const int kBitsPerInt = kIntSize * kBitsPerByte; |
-// Zap-value: The value used for zapping dead objects. Should be a recognizable |
-// illegal heap object pointer. |
+// Zap-value: The value used for zapping dead objects. |
+// Should be a recognizable hex value tagged as a heap object pointer. |
+#ifdef V8_ARCH_X64 |
iposva
2009/05/04 17:00:55
ditto!
|
+const Address kZapValue = |
+ reinterpret_cast<Address>(UINT64_C(0xdeadbeedbeadbeed)); |
+const Address kHandleZapValue = |
+ reinterpret_cast<Address>(UINT64_C(0x1baddead0baddead)); |
+const Address kFromSpaceZapValue = |
+ reinterpret_cast<Address>(UINT64_C(0x1beefdad0beefdad)); |
+#else |
const Address kZapValue = reinterpret_cast<Address>(0xdeadbeed); |
const Address kHandleZapValue = reinterpret_cast<Address>(0xbaddead); |
const Address kFromSpaceZapValue = reinterpret_cast<Address>(0xbeefdad); |
+#endif |
+ |
// ----------------------------------------------------------------------------- |
// Forward declarations for frequently used classes |
// (sorted alphabetically) |
@@ -372,13 +376,13 @@ |
// Testers for test. |
#define HAS_SMI_TAG(value) \ |
- ((reinterpret_cast<int>(value) & kSmiTagMask) == kSmiTag) |
+ ((reinterpret_cast<intptr_t>(value) & kSmiTagMask) == kSmiTag) |
#define HAS_FAILURE_TAG(value) \ |
- ((reinterpret_cast<int>(value) & kFailureTagMask) == kFailureTag) |
+ ((reinterpret_cast<intptr_t>(value) & kFailureTagMask) == kFailureTag) |
#define HAS_HEAP_OBJECT_TAG(value) \ |
- ((reinterpret_cast<int>(value) & kHeapObjectTagMask) == kHeapObjectTag) |
+ ((reinterpret_cast<intptr_t>(value) & kHeapObjectTagMask) == kHeapObjectTag) |
// OBJECT_SIZE_ALIGN returns the value aligned HeapObject size |
#define OBJECT_SIZE_ALIGN(value) \ |