Index: src/globals.h |
diff --git a/src/globals.h b/src/globals.h |
index a74b6c793036c5f3ba57bda6f393febe2805b77e..88c3e780d94e017b07b48f419dd7f07f78c1d6f0 100644 |
--- a/src/globals.h |
+++ b/src/globals.h |
@@ -1,4 +1,4 @@ |
-// Copyright 2006-2009 the V8 project authors. All rights reserved. |
+// Copyright 2010 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -193,9 +193,10 @@ const uint32_t kMaxUInt32 = 0xFFFFFFFFu; |
const int kCharSize = sizeof(char); // NOLINT |
const int kShortSize = sizeof(short); // NOLINT |
+const int kIntSize = sizeof(int); // NOLINT |
const int kDoubleSize = sizeof(double); // NOLINT |
const int kIntptrSize = sizeof(intptr_t); // NOLINT |
-// kIntSize and kPointerSize are defined in include/v8.h. |
+const int kPointerSize = sizeof(void*); // NOLINT |
#if V8_HOST_ARCH_64_BIT |
const int kPointerSizeLog2 = 3; |
@@ -207,38 +208,6 @@ const intptr_t kIntptrSignBit = 0x80000000; |
const uintptr_t kUintptrAllBitsSet = 0xFFFFFFFFu; |
#endif |
-// Mask for the sign bit in a smi. |
-const intptr_t kSmiSignMask = kIntptrSignBit; |
- |
-const int kObjectAlignmentBits = kPointerSizeLog2; |
-const intptr_t kObjectAlignment = 1 << kObjectAlignmentBits; |
-const intptr_t kObjectAlignmentMask = kObjectAlignment - 1; |
- |
-// Desired alignment for pointers. |
-const intptr_t kPointerAlignment = (1 << kPointerSizeLog2); |
-const intptr_t kPointerAlignmentMask = kPointerAlignment - 1; |
- |
-// Desired alignment for maps. |
-#if V8_HOST_ARCH_64_BIT |
-const intptr_t kMapAlignmentBits = kObjectAlignmentBits; |
-#else |
-const intptr_t kMapAlignmentBits = kObjectAlignmentBits + 3; |
-#endif |
-const intptr_t kMapAlignment = (1 << kMapAlignmentBits); |
-const intptr_t kMapAlignmentMask = kMapAlignment - 1; |
- |
-// Desired alignment for generated code is 32 bytes (to improve cache line |
-// utilization). |
-const int kCodeAlignmentBits = 5; |
-const intptr_t kCodeAlignment = 1 << kCodeAlignmentBits; |
-const intptr_t kCodeAlignmentMask = kCodeAlignment - 1; |
- |
-// Tag information for Failure. |
-const int kFailureTag = 3; |
-const int kFailureTagSize = 2; |
-const intptr_t kFailureTagMask = (1 << kFailureTagSize) - 1; |
- |
- |
const int kBitsPerByte = 8; |
const int kBitsPerByteLog2 = 3; |
const int kBitsPerPointer = kPointerSize * kBitsPerByte; |
@@ -254,364 +223,6 @@ const int kBinary32MinExponent = 0x01; |
const int kBinary32MantissaBits = 23; |
const int kBinary32ExponentShift = 23; |
-// Zap-value: The value used for zapping dead objects. |
-// Should be a recognizable hex value tagged as a heap object pointer. |
-#ifdef V8_HOST_ARCH_64_BIT |
-const Address kZapValue = |
- reinterpret_cast<Address>(V8_UINT64_C(0xdeadbeedbeadbeed)); |
-const Address kHandleZapValue = |
- reinterpret_cast<Address>(V8_UINT64_C(0x1baddead0baddead)); |
-const Address kFromSpaceZapValue = |
- reinterpret_cast<Address>(V8_UINT64_C(0x1beefdad0beefdad)); |
-const uint64_t kDebugZapValue = 0xbadbaddbbadbaddb; |
-#else |
-const Address kZapValue = reinterpret_cast<Address>(0xdeadbeed); |
-const Address kHandleZapValue = reinterpret_cast<Address>(0xbaddead); |
-const Address kFromSpaceZapValue = reinterpret_cast<Address>(0xbeefdad); |
-const uint32_t kDebugZapValue = 0xbadbaddb; |
-#endif |
- |
- |
-// Number of bits to represent the page size for paged spaces. The value of 13 |
-// gives 8K bytes per page. |
-const int kPageSizeBits = 13; |
- |
-// On Intel architecture, cache line size is 64 bytes. |
-// On ARM it may be less (32 bytes), but as far this constant is |
-// used for aligning data, it doesn't hurt to align on a greater value. |
-const int kProcessorCacheLineSize = 64; |
- |
-// Constants relevant to double precision floating point numbers. |
- |
-// Quiet NaNs have bits 51 to 62 set, possibly the sign bit, and no |
-// other bits set. |
-const uint64_t kQuietNaNMask = static_cast<uint64_t>(0xfff) << 51; |
-// If looking only at the top 32 bits, the QNaN mask is bits 19 to 30. |
-const uint32_t kQuietNaNHighBitsMask = 0xfff << (51 - 32); |
- |
- |
-// ----------------------------------------------------------------------------- |
-// Forward declarations for frequently used classes |
-// (sorted alphabetically) |
- |
-class AccessorInfo; |
-class Allocation; |
-class Arguments; |
-class Assembler; |
-class AssertNoAllocation; |
-class BreakableStatement; |
-class Code; |
-class CodeGenerator; |
-class CodeStub; |
-class Context; |
-class Debug; |
-class Debugger; |
-class DebugInfo; |
-class Descriptor; |
-class DescriptorArray; |
-class Expression; |
-class ExternalReference; |
-class FixedArray; |
-class FunctionEntry; |
-class FunctionLiteral; |
-class FunctionTemplateInfo; |
-class NumberDictionary; |
-class StringDictionary; |
-class FreeStoreAllocationPolicy; |
-template <typename T> class Handle; |
-class Heap; |
-class HeapObject; |
-class IC; |
-class InterceptorInfo; |
-class IterationStatement; |
-class JSArray; |
-class JSFunction; |
-class JSObject; |
-class LargeObjectSpace; |
-template <typename T, class P = FreeStoreAllocationPolicy> class List; |
-class LookupResult; |
-class MacroAssembler; |
-class Map; |
-class MapSpace; |
-class MarkCompactCollector; |
-class NewSpace; |
-class NodeVisitor; |
-class Object; |
-class MaybeObject; |
-class OldSpace; |
-class Property; |
-class Proxy; |
-class RegExpNode; |
-struct RegExpCompileData; |
-class RegExpTree; |
-class RegExpCompiler; |
-class RegExpVisitor; |
-class Scope; |
-template<class Allocator = FreeStoreAllocationPolicy> class ScopeInfo; |
-class SerializedScopeInfo; |
-class Script; |
-class Slot; |
-class Smi; |
-template <typename Config, class Allocator = FreeStoreAllocationPolicy> |
- class SplayTree; |
-class Statement; |
-class String; |
-class Struct; |
-class SwitchStatement; |
-class AstVisitor; |
-class Variable; |
-class VariableProxy; |
-class RelocInfo; |
-class Deserializer; |
-class MessageLocation; |
-class ObjectGroup; |
-class TickSample; |
-class VirtualMemory; |
-class Mutex; |
- |
-typedef bool (*WeakSlotCallback)(Object** pointer); |
- |
-// ----------------------------------------------------------------------------- |
-// Miscellaneous |
- |
-// NOTE: SpaceIterator depends on AllocationSpace enumeration values being |
-// consecutive. |
-enum AllocationSpace { |
- NEW_SPACE, // Semispaces collected with copying collector. |
- OLD_POINTER_SPACE, // May contain pointers to new space. |
- OLD_DATA_SPACE, // Must not have pointers to new space. |
- CODE_SPACE, // No pointers to new space, marked executable. |
- MAP_SPACE, // Only and all map objects. |
- CELL_SPACE, // Only and all cell objects. |
- LO_SPACE, // Promoted large objects. |
- |
- FIRST_SPACE = NEW_SPACE, |
- LAST_SPACE = LO_SPACE, |
- FIRST_PAGED_SPACE = OLD_POINTER_SPACE, |
- LAST_PAGED_SPACE = CELL_SPACE |
-}; |
-const int kSpaceTagSize = 3; |
-const int kSpaceTagMask = (1 << kSpaceTagSize) - 1; |
- |
- |
-// A flag that indicates whether objects should be pretenured when |
-// allocated (allocated directly into the old generation) or not |
-// (allocated in the young generation if the object size and type |
-// allows). |
-enum PretenureFlag { NOT_TENURED, TENURED }; |
- |
-enum GarbageCollector { SCAVENGER, MARK_COMPACTOR }; |
- |
-enum Executability { NOT_EXECUTABLE, EXECUTABLE }; |
- |
-enum VisitMode { VISIT_ALL, VISIT_ALL_IN_SCAVENGE, VISIT_ONLY_STRONG }; |
- |
-// Flag indicating whether code is built into the VM (one of the natives files). |
-enum NativesFlag { NOT_NATIVES_CODE, NATIVES_CODE }; |
- |
- |
-// A CodeDesc describes a buffer holding instructions and relocation |
-// information. The instructions start at the beginning of the buffer |
-// and grow forward, the relocation information starts at the end of |
-// the buffer and grows backward. |
-// |
-// |<--------------- buffer_size ---------------->| |
-// |<-- instr_size -->| |<-- reloc_size -->| |
-// +==================+========+==================+ |
-// | instructions | free | reloc info | |
-// +==================+========+==================+ |
-// ^ |
-// | |
-// buffer |
- |
-struct CodeDesc { |
- byte* buffer; |
- int buffer_size; |
- int instr_size; |
- int reloc_size; |
- Assembler* origin; |
-}; |
- |
- |
-// Callback function on object slots, used for iterating heap object slots in |
-// HeapObjects, global pointers to heap objects, etc. The callback allows the |
-// callback function to change the value of the slot. |
-typedef void (*ObjectSlotCallback)(HeapObject** pointer); |
- |
- |
-// Callback function used for iterating objects in heap spaces, |
-// for example, scanning heap objects. |
-typedef int (*HeapObjectCallback)(HeapObject* obj); |
- |
- |
-// Callback function used for checking constraints when copying/relocating |
-// objects. Returns true if an object can be copied/relocated from its |
-// old_addr to a new_addr. |
-typedef bool (*ConstraintCallback)(Address new_addr, Address old_addr); |
- |
- |
-// Callback function on inline caches, used for iterating over inline caches |
-// in compiled code. |
-typedef void (*InlineCacheCallback)(Code* code, Address ic); |
- |
- |
-// State for inline cache call sites. Aliased as IC::State. |
-enum InlineCacheState { |
- // Has never been executed. |
- UNINITIALIZED, |
- // Has been executed but monomorhic state has been delayed. |
- PREMONOMORPHIC, |
- // Has been executed and only one receiver type has been seen. |
- MONOMORPHIC, |
- // Like MONOMORPHIC but check failed due to prototype. |
- MONOMORPHIC_PROTOTYPE_FAILURE, |
- // Multiple receiver types have been seen. |
- MEGAMORPHIC, |
- // Special states for debug break or step in prepare stubs. |
- DEBUG_BREAK, |
- DEBUG_PREPARE_STEP_IN |
-}; |
- |
- |
-enum InLoopFlag { |
- NOT_IN_LOOP, |
- IN_LOOP |
-}; |
- |
- |
-enum CallFunctionFlags { |
- NO_CALL_FUNCTION_FLAGS = 0, |
- RECEIVER_MIGHT_BE_VALUE = 1 << 0 // Receiver might not be a JSObject. |
-}; |
- |
- |
-enum InlineCacheHolderFlag { |
- OWN_MAP, // For fast properties objects. |
- PROTOTYPE_MAP // For slow properties objects (except GlobalObjects). |
-}; |
- |
- |
-// Type of properties. |
-// Order of properties is significant. |
-// Must fit in the BitField PropertyDetails::TypeField. |
-// A copy of this is in mirror-debugger.js. |
-enum PropertyType { |
- NORMAL = 0, // only in slow mode |
- FIELD = 1, // only in fast mode |
- CONSTANT_FUNCTION = 2, // only in fast mode |
- CALLBACKS = 3, |
- INTERCEPTOR = 4, // only in lookup results, not in descriptors. |
- MAP_TRANSITION = 5, // only in fast mode |
- CONSTANT_TRANSITION = 6, // only in fast mode |
- NULL_DESCRIPTOR = 7, // only in fast mode |
- // All properties before MAP_TRANSITION are real. |
- FIRST_PHANTOM_PROPERTY_TYPE = MAP_TRANSITION, |
- // There are no IC stubs for NULL_DESCRIPTORS. Therefore, |
- // NULL_DESCRIPTOR can be used as the type flag for IC stubs for |
- // nonexistent properties. |
- NONEXISTENT = NULL_DESCRIPTOR |
-}; |
- |
- |
-// Whether to remove map transitions and constant transitions from a |
-// DescriptorArray. |
-enum TransitionFlag { |
- REMOVE_TRANSITIONS, |
- KEEP_TRANSITIONS |
-}; |
- |
- |
-// Union used for fast testing of specific double values. |
-union DoubleRepresentation { |
- double value; |
- int64_t bits; |
- DoubleRepresentation(double x) { value = x; } |
-}; |
- |
- |
-// Union used for customized checking of the IEEE double types |
-// inlined within v8 runtime, rather than going to the underlying |
-// platform headers and libraries |
-union IeeeDoubleLittleEndianArchType { |
- double d; |
- struct { |
- unsigned int man_low :32; |
- unsigned int man_high :20; |
- unsigned int exp :11; |
- unsigned int sign :1; |
- } bits; |
-}; |
- |
- |
-union IeeeDoubleBigEndianArchType { |
- double d; |
- struct { |
- unsigned int sign :1; |
- unsigned int exp :11; |
- unsigned int man_high :20; |
- unsigned int man_low :32; |
- } bits; |
-}; |
- |
- |
-// AccessorCallback |
-struct AccessorDescriptor { |
- MaybeObject* (*getter)(Object* object, void* data); |
- MaybeObject* (*setter)(JSObject* object, Object* value, void* data); |
- void* data; |
-}; |
- |
- |
-// Logging and profiling. |
-// A StateTag represents a possible state of the VM. When compiled with |
-// ENABLE_VMSTATE_TRACKING, the logger maintains a stack of these. |
-// Creating a VMState object enters a state by pushing on the stack, and |
-// destroying a VMState object leaves a state by popping the current state |
-// from the stack. |
- |
-#define STATE_TAG_LIST(V) \ |
- V(JS) \ |
- V(GC) \ |
- V(COMPILER) \ |
- V(OTHER) \ |
- V(EXTERNAL) |
- |
-enum StateTag { |
-#define DEF_STATE_TAG(name) name, |
- STATE_TAG_LIST(DEF_STATE_TAG) |
-#undef DEF_STATE_TAG |
- // Pseudo-types. |
- state_tag_count |
-}; |
- |
- |
-// ----------------------------------------------------------------------------- |
-// Macros |
- |
-// Testers for test. |
- |
-#define HAS_SMI_TAG(value) \ |
- ((reinterpret_cast<intptr_t>(value) & kSmiTagMask) == kSmiTag) |
- |
-#define HAS_FAILURE_TAG(value) \ |
- ((reinterpret_cast<intptr_t>(value) & kFailureTagMask) == kFailureTag) |
- |
-// OBJECT_POINTER_ALIGN returns the value aligned as a HeapObject pointer |
-#define OBJECT_POINTER_ALIGN(value) \ |
- (((value) + kObjectAlignmentMask) & ~kObjectAlignmentMask) |
- |
-// POINTER_SIZE_ALIGN returns the value aligned as a pointer. |
-#define POINTER_SIZE_ALIGN(value) \ |
- (((value) + kPointerAlignmentMask) & ~kPointerAlignmentMask) |
- |
-// MAP_POINTER_ALIGN returns the value aligned as a map pointer. |
-#define MAP_POINTER_ALIGN(value) \ |
- (((value) + kMapAlignmentMask) & ~kMapAlignmentMask) |
- |
-// CODE_POINTER_ALIGN returns the value aligned as a generated code segment. |
-#define CODE_POINTER_ALIGN(value) \ |
- (((value) + kCodeAlignmentMask) & ~kCodeAlignmentMask) |
- |
// The expression OFFSET_OF(type, field) computes the byte-offset |
// of the specified field relative to the containing type. This |
// corresponds to 'offsetof' (in stddef.h), except that it doesn't |
@@ -668,26 +279,6 @@ F FUNCTION_CAST(Address addr) { |
DISALLOW_COPY_AND_ASSIGN(TypeName) |
-// Support for tracking C++ memory allocation. Insert TRACK_MEMORY("Fisk") |
-// inside a C++ class and new and delete will be overloaded so logging is |
-// performed. |
-// This file (globals.h) is included before log.h, so we use direct calls to |
-// the Logger rather than the LOG macro. |
-#ifdef DEBUG |
-#define TRACK_MEMORY(name) \ |
- void* operator new(size_t size) { \ |
- void* result = ::operator new(size); \ |
- Logger::NewEvent(name, result, size); \ |
- return result; \ |
- } \ |
- void operator delete(void* object) { \ |
- Logger::DeleteEvent(name, object); \ |
- ::operator delete(object); \ |
- } |
-#else |
-#define TRACK_MEMORY(name) |
-#endif |
- |
// Define used for helping GCC to make better inlining. Don't bother for debug |
// builds. On GCC 3.4.5 using __attribute__((always_inline)) causes compilation |
// errors in debug build. |
@@ -711,20 +302,12 @@ F FUNCTION_CAST(Address addr) { |
#define MUST_USE_RESULT |
#endif |
+// ----------------------------------------------------------------------------- |
+// Forward declarations for frequently used classes |
+// (sorted alphabetically) |
-// Feature flags bit positions. They are mostly based on the CPUID spec. |
-// (We assign CPUID itself to one of the currently reserved bits -- |
-// feel free to change this if needed.) |
-// On X86/X64, values below 32 are bits in EDX, values above 32 are bits in ECX. |
-enum CpuFeature { SSE4_1 = 32 + 19, // x86 |
- SSE3 = 32 + 0, // x86 |
- SSE2 = 26, // x86 |
- CMOV = 15, // x86 |
- RDTSC = 4, // x86 |
- CPUID = 10, // x86 |
- VFP3 = 1, // ARM |
- ARMv7 = 2, // ARM |
- SAHF = 0}; // x86 |
+class FreeStoreAllocationPolicy; |
+template <typename T, class P = FreeStoreAllocationPolicy> class List; |
} } // namespace v8::internal |