5#ifndef V8_COMMON_GLOBALS_H_
6#define V8_COMMON_GLOBALS_H_
23#define V8_INFINITY std::numeric_limits<double>::infinity()
27#if defined(V8_OS_AIX) && defined(jmpbuf)
43#if !defined(USE_SIMULATOR)
44#if (V8_TARGET_ARCH_ARM64 && !V8_HOST_ARCH_ARM64)
45#define USE_SIMULATOR 1
47#if (V8_TARGET_ARCH_ARM && !V8_HOST_ARCH_ARM)
48#define USE_SIMULATOR 1
50#if (V8_TARGET_ARCH_PPC64 && !V8_HOST_ARCH_PPC64)
51#define USE_SIMULATOR 1
53#if (V8_TARGET_ARCH_MIPS64 && !V8_HOST_ARCH_MIPS64)
54#define USE_SIMULATOR 1
56#if (V8_TARGET_ARCH_S390X && !V8_HOST_ARCH_S390X)
57#define USE_SIMULATOR 1
59#if (V8_TARGET_ARCH_RISCV64 && !V8_HOST_ARCH_RISCV64)
60#define USE_SIMULATOR 1
62#if (V8_TARGET_ARCH_RISCV32 && !V8_HOST_ARCH_RISCV32)
63#define USE_SIMULATOR 1
65#if (V8_TARGET_ARCH_LOONG64 && !V8_HOST_ARCH_LOONG64)
66#define USE_SIMULATOR 1
71#define USE_SIMULATOR_BOOL true
73#define USE_SIMULATOR_BOOL false
78#if V8_TARGET_ARCH_PPC64
79#define V8_EMBEDDED_CONSTANT_POOL_BOOL true
81#define V8_EMBEDDED_CONSTANT_POOL_BOOL false
85#define DEBUG_BOOL true
87#define DEBUG_BOOL false
91#define V8_MAP_PACKING_BOOL true
93#define V8_MAP_PACKING_BOOL false
96#ifdef V8_COMPRESS_POINTERS
97#define COMPRESS_POINTERS_BOOL true
99#define COMPRESS_POINTERS_BOOL false
102#if COMPRESS_POINTERS_BOOL && V8_TARGET_ARCH_X64
103#define DECOMPRESS_POINTER_BY_ADDRESSING_MODE true
105#define DECOMPRESS_POINTER_BY_ADDRESSING_MODE false
108#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
109#define COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL true
111#define COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL false
114#if COMPRESS_POINTERS_BOOL && !COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL
115#define COMPRESS_POINTERS_IN_MULTIPLE_CAGES_BOOL true
117#define COMPRESS_POINTERS_IN_MULTIPLE_CAGES_BOOL false
120#ifndef V8_DISABLE_WRITE_BARRIERS
121#define V8_CAN_CREATE_SHARED_HEAP_BOOL true
123#define V8_CAN_CREATE_SHARED_HEAP_BOOL false
126#ifdef V8_LOWER_LIMITS_MODE
127#define V8_LOWER_LIMITS_MODE_BOOL true
129#define V8_LOWER_LIMITS_MODE_BOOL false
132#ifdef V8_STATIC_ROOTS_GENERATION
133#define V8_STATIC_ROOTS_GENERATION_BOOL true
135#define V8_STATIC_ROOTS_GENERATION_BOOL false
138#ifdef V8_ENABLE_LEAPTIERING
139#define V8_ENABLE_LEAPTIERING_BOOL true
144#ifdef V8_STATIC_ROOTS
145#define V8_STATIC_DISPATCH_HANDLES_BOOL true
147#define V8_STATIC_DISPATCH_HANDLES_BOOL false
151#define V8_ENABLE_LEAPTIERING_BOOL false
154#ifdef V8_ENABLE_SANDBOX
155#define V8_ENABLE_SANDBOX_BOOL true
157#define V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE 1
158#define V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE_BOOL true
160#define V8_ENABLE_SANDBOX_BOOL false
161#define V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE_BOOL false
164#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
165#define ENABLE_CONTROL_FLOW_INTEGRITY_BOOL true
167#define ENABLE_CONTROL_FLOW_INTEGRITY_BOOL false
170#if V8_TARGET_ARCH_ARM
173#define V8_DEFAULT_STACK_SIZE_KB 864
174#elif V8_TARGET_ARCH_IA32
180#define V8_DEFAULT_STACK_SIZE_KB 864
181#elif V8_USE_ADDRESS_SANITIZER
187#define V8_DEFAULT_STACK_SIZE_KB 960
191#define V8_DEFAULT_STACK_SIZE_KB 984
195#if defined(USE_SIMULATOR) && \
196 (defined(V8_TARGET_ARCH_ARM64) || defined(V8_TARGET_ARCH_MIPS64) || \
197 defined(V8_TARGET_ARCH_LOONG64) || defined(V8_TARGET_ARCH_RISCV64))
198#define V8_USE_SIMULATOR_WITH_GENERIC_C_CALLS
199#define V8_IF_USE_SIMULATOR(V) , V
201#define V8_IF_USE_SIMULATOR(V)
227#if (defined(V8_SHORT_BUILTIN_CALLS) && !defined(V8_COMPRESS_POINTERS)) || \
228 defined(V8_EXTERNAL_CODE_SPACE)
229#define V8_ENABLE_NEAR_CODE_RANGE_BOOL true
231#define V8_ENABLE_NEAR_CODE_RANGE_BOOL false
239#ifdef V8_ENABLE_SWISS_NAME_DICTIONARY
240#define V8_ENABLE_SWISS_NAME_DICTIONARY_BOOL true
242#define V8_ENABLE_SWISS_NAME_DICTIONARY_BOOL false
246#ifdef V8_DICT_PROPERTY_CONST_TRACKING
247#define V8_DICT_PROPERTY_CONST_TRACKING_BOOL true
249#define V8_DICT_PROPERTY_CONST_TRACKING_BOOL false
252#ifdef V8_EXTERNAL_CODE_SPACE
253#define V8_EXTERNAL_CODE_SPACE_BOOL true
255#define V8_EXTERNAL_CODE_SPACE_BOOL false
259#if defined(V8_ENABLE_BUILTIN_JUMP_TABLE_SWITCH) && defined(ENABLE_DISASSEMBLER)
260#define V8_BUILTIN_JUMP_TABLE_INFO_BOOL true
262#define V8_BUILTIN_JUMP_TABLE_INFO_BOOL false
293#if V8_HAS_PTHREAD_JIT_WRITE_PROTECT && \
294 !(defined(V8_COMPRESS_POINTERS) && !defined(V8_EXTERNAL_CODE_SPACE))
295#define V8_HEAP_USE_PTHREAD_JIT_WRITE_PROTECT true
297#define V8_HEAP_USE_PTHREAD_JIT_WRITE_PROTECT false
301#if V8_HAS_BECORE_JIT_WRITE_PROTECT && \
302 !(defined(V8_COMPRESS_POINTERS) && !defined(V8_EXTERNAL_CODE_SPACE))
303#define V8_HEAP_USE_BECORE_JIT_WRITE_PROTECT true
305#define V8_HEAP_USE_BECORE_JIT_WRITE_PROTECT false
309#if V8_HAS_PKU_JIT_WRITE_PROTECT && \
310 !(defined(V8_COMPRESS_POINTERS) && !defined(V8_EXTERNAL_CODE_SPACE))
311#define V8_HEAP_USE_PKU_JIT_WRITE_PROTECT true
313#define V8_HEAP_USE_PKU_JIT_WRITE_PROTECT false
320#if V8_HAS_PKU_JIT_WRITE_PROTECT && defined(V8_ENABLE_SANDBOX) && defined(DEBUG)
321#define V8_ENABLE_SANDBOX_HARDWARE_SUPPORT true
323#define V8_ENABLE_SANDBOX_HARDWARE_SUPPORT false
328#if V8_TARGET_ARCH_64_BIT && !defined(V8_COMPRESS_POINTERS)
329#define TAGGED_SIZE_8_BYTES true
331#define TAGGED_SIZE_8_BYTES false
334#if defined(V8_OS_WIN) && defined(V8_TARGET_ARCH_X64)
335#define V8_OS_WIN_X64 true
338#if defined(V8_OS_WIN) && defined(V8_TARGET_ARCH_ARM64)
339#define V8_OS_WIN_ARM64 true
342#if defined(V8_OS_WIN_X64) || defined(V8_OS_WIN_ARM64)
343#define V8_OS_WIN64 true
350#if defined(V8_TARGET_ARCH_X64) || defined(V8_TARGET_ARCH_ARM64) || \
351 defined(V8_TARGET_ARCH_MIPS64) || defined(V8_TARGET_ARCH_LOONG64) || \
352 defined(V8_TARGET_ARCH_RISCV64)
353#define V8_ENABLE_FP_PARAMS_IN_C_LINKAGE 1
356#ifdef V8_ENABLE_EXPERIMENTAL_UNDEFINED_DOUBLE
357#define V8_EXPERIMENTAL_UNDEFINED_DOUBLE_BOOL true
359#define V8_EXPERIMENTAL_UNDEFINED_DOUBLE_BOOL false
415#if V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_IA32
441#if V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_LOONG64
444#elif V8_TARGET_ARCH_PPC64
458#if V8_HOST_ARCH_64_BIT
461 static_cast<intptr_t
>(uintptr_t{0x8000000000000000});
463#if V8_HOST_ARCH_PPC64 && V8_TARGET_ARCH_PPC64 && V8_OS_LINUX
466#elif V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_LOONG64 || V8_TARGET_ARCH_RISCV64
471#elif V8_TARGET_ARCH_X64
489constexpr size_t kMaximalTrustedRangeSize = 1 *
GB;
490constexpr size_t kMinimumTrustedRangeSize = 32 *
MB;
496#if V8_HOST_ARCH_PPC64 && V8_TARGET_ARCH_PPC64 && V8_OS_LINUX
501#elif V8_TARGET_ARCH_RISCV32
517#ifdef V8_COMPRESS_ZONES
518#define COMPRESS_ZONES_BOOL true
520#define COMPRESS_ZONES_BOOL false
527#ifdef V8_COMPRESS_POINTERS
530 "Pointer compression can be enabled only for 64-bit architectures");
573#ifdef V8_TARGET_ARCH_64_BIT
577 "kJSDispatchTableReservationSize and kJSDispatchEntryHandleShift "
580#elif defined(V8_TARGET_ARCH_32_BIT)
584constexpr uint32_t kJSDispatchHandleShift = 0;
598#ifndef V8_COMPRESS_POINTERS
604#ifdef V8_COMPRESS_POINTERS_8GB
606#define V8_COMPRESS_POINTERS_8GB_BOOL true
608#define V8_COMPRESS_POINTERS_8GB_BOOL false
614#ifdef V8_ENABLE_SANDBOX
623#ifdef V8_COMPRESS_POINTERS
633#ifdef V8_ENABLE_SANDBOX
662 << kJSDispatchHandleShift);
712#define FUNCTION_ADDR(f) (reinterpret_cast<v8::internal::Address>(f))
718 return reinterpret_cast<F>(
reinterpret_cast<Address>(addr));
723 return reinterpret_cast<F>(addr);
729#if V8_HOST_ARCH_PPC64 && \
730 (V8_OS_AIX || (V8_TARGET_ARCH_PPC64 && V8_TARGET_BIG_ENDIAN && \
731 (!defined(_CALL_ELF) || _CALL_ELF == 1)))
732#define USES_FUNCTION_DESCRIPTORS 1
733#define FUNCTION_ENTRYPOINT_ADDRESS(f) \
734 (reinterpret_cast<v8::internal::Address*>( \
735 &(reinterpret_cast<intptr_t*>(f)[0])))
737#define USES_FUNCTION_DESCRIPTORS 0
741 for (;; ++s1, ++s2) {
742 if (*s1 != *s2)
return false;
743 if (*s1 ==
'\0')
return true;
756 return static_cast<size_t>(
mode);
795 return static_cast<LanguageMode>(
static_cast<int>(mode1) |
796 static_cast<int>(mode2));
878 return static_cast<size_t>(
kind);
900 return os <<
"normal hoisting";
902 return os <<
"legacy sloppy hoisting";
907static_assert(
kSmiValueSize <= 32,
"Unsupported Smi tagging scheme");
911 "Unsupported Smi tagging scheme");
918 "Unsupported Smi tagging scheme");
920 "Unsupported Smi tagging scheme");
922 "Unsupported Smi tagging scheme");
937#ifdef V8_COMPRESS_POINTERS_8GB
940 "When the 8GB heap is enabled, all allocations should be aligned to twice "
941 "the size of a tagged value.");
955#if V8_TARGET_ARCH_X64
957#elif V8_TARGET_ARCH_PPC64
985#ifdef V8_HOST_ARCH_64_BIT
987constexpr uint64_t
kZapValue = uint64_t{0xdeadbeedbeadbeef};
992 uint64_t{0x1beffedaabaffedf};
994 uint64_t{0x1beffedeebaffedf};
996 uint64_t{0x1beffed11baffedf};
998 uint64_t{0x1beffed77baffedf};
1025#define PROCESSOR_CACHE_LINE_SIZE 64
1045template <ArgumentsType>
1061template <
typename T>
1063#ifdef V8_ENABLE_DIRECT_HANDLE
1064template <
typename T>
1076template <
typename T>
1085template <
typename T>
1100#ifdef V8_ENABLE_DIRECT_HANDLE
1101template <
typename T>
1104template <
typename T>
1106template <
typename T>
1108template <
typename T>
1113template <
typename T>
1126template <HeapObjectReferenceType kRefType,
typename StorageType>
1130class CompressedObjectSlot;
1131class CompressedMaybeObjectSlot;
1132class CompressedMapWordSlot;
1133class CompressedHeapObjectSlot;
1134template <
typename Cage>
1138#ifdef V8_ENABLE_SANDBOX
1145class ExternalCodeCompressionScheme;
1146template <
typename CompressionScheme>
1148template <
typename CompressionScheme>
1162template <
typename Config,
class Allocator = FreeStoreAllocationPolicy>
1168template <
typename T>
1170template <
typename... Ts>
1174class MaglevAssembler;
1211#ifdef V8_COMPRESS_POINTERS
1217#ifdef V8_EXTERNAL_CODE_SPACE
1230#ifdef V8_ENABLE_SANDBOX
1280template <
typename TSlot>
1282 static constexpr bool value =
false;
1284#ifdef V8_ENABLE_SANDBOX
1287 static constexpr bool value =
true;
1291 static constexpr bool value =
true;
1295template <
typename TSlot>
1352 return "read_only_space";
1358 return "code_space";
1360 return "shared_space";
1362 return "trusted_space";
1364 return "shared_trusted_space";
1366 return "new_large_object_space";
1368 return "large_object_space";
1370 return "code_large_object_space";
1372 return "shared_large_object_space";
1374 return "shared_trusted_large_object_space";
1376 return "trusted_large_object_space";
1415 return "SharedTrusted";
1465 "The value of kGarbageCollectionReasonMaxValue is inconsistent.");
1470 return "allocation failure";
1472 return "allocation limit";
1474 return "context disposal";
1476 return "counters extension";
1480 return "deserialize";
1482 return "external memory pressure";
1484 return "finalize incremental marking via stack guard";
1486 return "finalize incremental marking via task";
1488 return "full hash-table";
1490 return "heap profiler";
1494 return "last resort";
1496 return "low memory notification";
1498 return "make heap iterable";
1500 return "memory pressure";
1502 return "memory reducer";
1506 return "sampling profiler";
1508 return "snapshot creator";
1512 return "external finalize";
1514 return "global allocation limit";
1516 return "measure memory";
1520 return "background allocation failure";
1522 return "finalize concurrent MinorMS";
1524 return "CppHeap allocation failure";
1528 return "idle context disposal";
1540 return static_cast<uint8_t
>(
kind);
1562#define USE_ALLOCATION_ALIGNMENT_BOOL false
1574 switch (collector) {
1578 return "Mark-Sweep-Compact";
1580 return "Minor Mark-Sweep";
1629 return mode.empty();
1695 return "NOFEEDBACK";
1697 return "UNINITIALIZED";
1699 return "MONOMORPHIC";
1701 return "RECOMPUTE_HANDLER";
1703 return "POLYMORPHIC";
1705 return "MEGAMORPHIC";
1756#if V8_TARGET_LITTLE_ENDIAN
1771#define HAS_SMI_TAG(value) \
1772 ((static_cast<i::Tagged_t>(value) & ::i::kSmiTagMask) == ::i::kSmiTag)
1774#define HAS_STRONG_HEAP_OBJECT_TAG(value) \
1775 (((static_cast<i::Tagged_t>(value) & ::i::kHeapObjectTagMask) == \
1776 ::i::kHeapObjectTag))
1778#define HAS_WEAK_HEAP_OBJECT_TAG(value) \
1779 (((static_cast<i::Tagged_t>(value) & ::i::kHeapObjectTagMask) == \
1780 ::i::kWeakHeapObjectTag))
1783#define OBJECT_POINTER_ALIGN(value) \
1784 (((value) + ::i::kObjectAlignmentMask) & ~::i::kObjectAlignmentMask)
1791#ifdef V8_COMPRESS_POINTERS_8GB
1792#define ALIGN_TO_ALLOCATION_ALIGNMENT(value) \
1793 (((value) + ::i::kObjectAlignment8GbHeapMask) & \
1794 ~::i::kObjectAlignment8GbHeapMask)
1796#define ALIGN_TO_ALLOCATION_ALIGNMENT(value) (value)
1801#define OBJECT_POINTER_PADDING(value) (OBJECT_POINTER_ALIGN(value) - (value))
1804#define POINTER_SIZE_ALIGN(value) \
1805 (((value) + ::i::kPointerAlignmentMask) & ~::i::kPointerAlignmentMask)
1809#define POINTER_SIZE_PADDING(value) (POINTER_SIZE_ALIGN(value) - (value))
1812#define CODE_POINTER_ALIGN(value) \
1813 (((value) + ::i::kCodeAlignmentMask) & ~::i::kCodeAlignmentMask)
1817#define CODE_POINTER_PADDING(value) (CODE_POINTER_ALIGN(value) - (value))
1820#define DOUBLE_POINTER_ALIGN(value) \
1821 (((value) + ::i::kDoubleAlignmentMask) & ~::i::kDoubleAlignmentMask)
1849 return os <<
"NULL_OR_UNDEFINED";
1851 return os <<
"NOT_NULL_OR_UNDEFINED";
1880 return os <<
"MAPPED_ARGUMENTS";
1882 return os <<
"UNMAPPED_ARGUMENTS";
1884 return os <<
"REST_PARAMETER";
1909 return os <<
"EVAL_SCOPE";
1911 return os <<
"FUNCTION_SCOPE";
1913 return os <<
"MODULE_SCOPE";
1915 return os <<
"SCRIPT_SCOPE";
1917 return os <<
"CATCH_SCOPE";
1919 return os <<
"BLOCK_SCOPE";
1921 return os <<
"CLASS_SCOPE";
1923 return os <<
"WITH_SCOPE";
1925 return os <<
"SHADOW_REALM_SCOPE";
1927 return os <<
"REPL_MODE_SCOPE";
1943#if (V8_TARGET_ARCH_MIPS64 && !defined(_MIPS_ARCH_MIPS64R6) && \
1944 (!defined(USE_SIMULATOR) || !defined(_MIPS_TARGET_SIMULATOR)))
1947#ifdef V8_ENABLE_EXPERIMENTAL_UNDEFINED_DOUBLE
1948constexpr uint32_t kUndefinedNanUpper32 = 0xFFFE7FFF;
1949constexpr uint32_t kUndefinedNanLower32 = 0xFFFE7FFF;
1954#ifdef V8_ENABLE_EXPERIMENTAL_UNDEFINED_DOUBLE
1955constexpr uint32_t kUndefinedNanUpper32 = 0xFFFFFFFF;
1956constexpr uint32_t kUndefinedNanLower32 = 0xFFFFFFFF;
1962#ifdef V8_ENABLE_EXPERIMENTAL_UNDEFINED_DOUBLE
1963constexpr uint64_t kUndefinedNanInt64 =
1964 (
static_cast<uint64_t
>(kUndefinedNanUpper32) << 32) | kUndefinedNanLower32;
1967#ifdef V8_ENABLE_EXPERIMENTAL_UNDEFINED_DOUBLE
1969inline bool IsUndefinedNan(
double d) {
1971 std::memcpy(&b, &d,
sizeof(
double));
1972 return b == kUndefinedNanInt64;
1974inline double UndefinedNan() {
1975 uint64_t b = kUndefinedNanInt64;
1977 std::memcpy(&d, &b,
sizeof(
double));
2062inline const char* VariableMode2String(
VariableMode mode) {
2069 return "PRIVATE_GETTER_ONLY";
2071 return "PRIVATE_SETTER_ONLY";
2073 return "PRIVATE_METHOD";
2075 return "PRIVATE_GETTER_AND_SETTER";
2081 return "DYNAMIC_GLOBAL";
2083 return "DYNAMIC_LOCAL";
2089 return "AWAIT_USING";
2102 return "await using";
2247 return os <<
"ArrayFunction";
2249 return os <<
"WithFinalSpread";
2251 return os <<
"Other";
2385 return static_cast<uint8_t
>(encoding);
2391 return os <<
"UTF16";
2393 return os <<
"UTF32";
2403 return os <<
"IterationKind::kKeys";
2405 return os <<
"IterationKind::kValues";
2407 return os <<
"IterationKind::kEntries";
2417 return os <<
"CollectionKind::kMap";
2419 return os <<
"CollectionKind::kSet";
2469 : name(name), file(file), line(line) {}
2477 os <<
"(" << info.name <<
":" << info.file <<
":" << info.line <<
")";
2489#ifndef V8_ENABLE_LEAPTIERING
2491#define TIERING_STATE_LIST(V) \
2493 V(InProgress, 0b001) \
2494 V(RequestMaglev_Synchronous, 0b010) \
2495 V(RequestMaglev_Concurrent, 0b011) \
2496 V(RequestTurbofan_Synchronous, 0b100) \
2497 V(RequestTurbofan_Concurrent, 0b101)
2500#define V(Name, Value) k##Name = Value,
2509static_assert(
static_cast<int>(TieringState::kNone) == 0b00 &&
2510 static_cast<int>(TieringState::kInProgress) == 0b01);
2514#define V(Name, Value) \
2515 constexpr bool Is##Name(TieringState state) { \
2516 return state == TieringState::k##Name; \
2522 return IsRequestMaglev_Concurrent(state) ||
2523 IsRequestMaglev_Synchronous(state);
2526 return IsRequestTurbofan_Concurrent(state) ||
2527 IsRequestTurbofan_Synchronous(state);
2532#define V(Name, Value) \
2533 case TieringState::k##Name: \
2534 return "TieringState::k" #Name;
2544#undef TIERING_STATE_LIST
2584 switch (speculation_mode) {
2586 return os <<
"SpeculationMode::kAllowSpeculation";
2588 return os <<
"SpeculationMode::kDisallowSpeculation";
2606 return "ConcurrencyMode::kSynchronous";
2608 return "ConcurrencyMode::kConcurrent";
2626#define FOR_EACH_ISOLATE_ADDRESS_NAME(C) \
2627 C(Handler, handler) \
2628 C(CEntryFP, c_entry_fp) \
2629 C(CFunction, c_function) \
2630 C(Context, context) \
2631 C(Exception, exception) \
2632 C(TopmostScriptHavingContext, topmost_script_having_context) \
2633 C(PendingHandlerContext, pending_handler_context) \
2634 C(PendingHandlerEntrypoint, pending_handler_entrypoint) \
2635 C(PendingHandlerConstantPool, pending_handler_constant_pool) \
2636 C(PendingHandlerFP, pending_handler_fp) \
2637 C(PendingHandlerSP, pending_handler_sp) \
2638 C(NumFramesAbovePendingHandler, num_frames_above_pending_handler) \
2639 C(IsOnCentralStackFlag, is_on_central_stack_flag) \
2640 C(JSEntrySP, js_entry_sp)
2643#define DECLARE_ENUM(CamelName, hacker_name) k##CamelName##Address,
2650#define FOREACH_WASM_TRAPREASON(V) \
2651 V(TrapUnreachable) \
2652 V(TrapMemOutOfBounds) \
2653 V(TrapUnalignedAccess) \
2655 V(TrapDivUnrepresentable) \
2657 V(TrapFloatUnrepresentable) \
2658 V(TrapFuncSigMismatch) \
2659 V(TrapDataSegmentOutOfBounds) \
2660 V(TrapElementSegmentOutOfBounds) \
2661 V(TrapTableOutOfBounds) \
2662 V(TrapRethrowNull) \
2663 V(TrapNullDereference) \
2664 V(TrapIllegalCast) \
2665 V(TrapArrayOutOfBounds) \
2666 V(TrapArrayTooLarge) \
2667 V(TrapStringOffsetOutOfBounds)
2677 bool handle_holes) {
2679 static_cast<int>(handle_oob) | (
static_cast<int>(handle_holes) << 1));
2684 using T = std::underlying_type<KeyedAccessLoadMode>::type;
2686 static_cast<T
>(mode2));
2690 using T = std::underlying_type<KeyedAccessLoadMode>::type;
2691 return (
static_cast<T
>(load_mode) &
2696 using T = std::underlying_type<KeyedAccessLoadMode>::type;
2697 return (
static_cast<T
>(load_mode) &
2711 return os <<
"kInBounds";
2713 return os <<
"kGrowAndHandleCOW";
2715 return os <<
"kIgnoreTypedArrayOOB";
2717 return os <<
"kHandleCOW";
2758#if V8_ENABLE_WEBASSEMBLY
2759 kCallWasmRuntimeStub,
2800 return !
static_cast<bool>(
status);
2808#ifdef V8_COMPRESS_POINTERS
2809class PtrComprCageBase {
2817 inline Address address()
const {
return address_; }
2820 return address_ == other.address_;
2842 DCHECK_EQ((value & 0x80000000) != 0, (value & 0x40000000) != 0);
2845 DCHECK_EQ((value & 0x80000000) != 0, (value & 0x40000000) != 0);
2881 return value_ == other.value_;
2884 return value_ != other.value_;
2887 template <
typename H>
2889 return H::combine(std::move(h), code_pointer.
value());
#define DEFINE_OPERATORS_FOR_FLAGS(Type)
constexpr int kPageSizeBits
@ kInternalizedStringFlag
@ kReceiverOrNullOrUndefined
static constexpr size_t kExternalAllocationSoftLimit
static const int kDontThrow
static const int kThrowOnError
PtrComprCageBase()=default
PtrComprCageBase(const LocalIsolate *isolate)
PtrComprCageBase(const Isolate *isolate)
constexpr PtrComprCageBase(Address address)
friend H AbslHashValue(H h, const WasmCodePointer &code_pointer)
constexpr WasmCodePointer(uint32_t value)
bool operator==(const WasmCodePointer &other) const
bool operator!=(const WasmCodePointer &other) const
WasmCodePointer()=default
int31_t & operator=(int value)
constexpr int31_t(int value)
#define V8_ENABLE_LEAPTIERING_BOOL
#define V8_EXTERNAL_CODE_SPACE_BOOL
#define TAGGED_SIZE_8_BYTES
#define COMPRESS_POINTERS_BOOL
#define V8_DEFAULT_STACK_SIZE_KB
#define V8_LOWER_LIMITS_MODE_BOOL
#define COMPRESS_ZONES_BOOL
#define FOR_EACH_ISOLATE_ADDRESS_NAME(C)
#define TIERING_STATE_LIST(V)
V8_INLINE Dest bit_cast(Source const &source)
constexpr uint32_t kPersistentHandleZapValue
bool is_valid_language_mode(int language_mode)
PropertiesEnumerationMode
constexpr intptr_t kPointerAlignment
constexpr bool IsSharedAllocationType(AllocationType kind)
constexpr int kBinary32MinExponent
bool(*)(FullObjectSlot pointer) WeakSlotCallback
IndirectPointerHandle TrustedPointerHandle
@ kFinalizeMarkingViaStackGuard
@ kBackgroundAllocationFailure
@ kFinalizeConcurrentMinorMS
@ kCppHeapAllocationFailure
@ kExternalMemoryPressure
@ kFinalizeMarkingViaTask
constexpr int kFunctionEntryBytecodeOffset
SlotTraits::TProtectedMaybeObjectSlot ProtectedMaybeObjectSlot
constexpr int kSmallOrderedHashMapMinCapacity
constexpr int kSpaceTagSize
constexpr const char * ToString(DeoptimizeKind kind)
constexpr int kTaggedSize
bool StoreModeHandlesCOW(KeyedAccessStoreMode store_mode)
bool StoreModeIsInBounds(KeyedAccessStoreMode store_mode)
bool StoreModeCanGrow(KeyedAccessStoreMode store_mode)
constexpr int kBinary32ExponentBias
constexpr double kMaxSafeInteger
LanguageMode stricter_language_mode(LanguageMode mode1, LanguageMode mode2)
constexpr int kMaxRegularHeapObjectSize
constexpr int kSimd128Size
@ LAST_ALLOCATION_SITE_MODE
@ DONT_TRACK_ALLOCATION_SITE
constexpr double kMaxUInt32Double
constexpr int kMinParameterIndex
constexpr int kBitsPerByte
constexpr int kCodePointerSize
constexpr int kSystemPointerHexDigits
constexpr DeoptimizeKind kFirstDeoptimizeKind
constexpr int kJSCallClosureParameterIndex
constexpr int kBinary32MaxExponent
bool is_sloppy(LanguageMode language_mode)
constexpr uint32_t kPhantomReferenceZap
static constexpr uint32_t kFalse
constexpr int kNoSourcePosition
constexpr int kProtectedPointerSize
constexpr size_t kIsolateDataAlignment
constexpr int kPointerSizeLog2
constexpr intptr_t kObjectAlignment
bool IsLexicalVariableMode(VariableMode mode)
size_t hash_value(AtomicMemoryOrder order)
constexpr uint32_t kFromSpaceZapValue
constexpr JSDispatchHandle kInvalidDispatchHandle(0xffffffff<< kJSDispatchHandleShift)
bool IsDeclaredVariableMode(VariableMode mode)
constexpr int kOneByteSize
static constexpr bool SlotHoldsTrustedPointerV
bool IsForceFlushingEnabled(base::EnumSet< CodeFlushMode > mode)
constexpr uint32_t kTracedHandleEagerResetZapValue
constexpr int kJSDispatchHandleSize
const size_t kShortBuiltinCallsOldSpaceSizeThreshold
constexpr uint32_t kBinary32SignMask
bool IsByteCodeFlushingEnabled(base::EnumSet< CodeFlushMode > mode)
constexpr int kBinary32ExponentShift
constexpr uint64_t kMinUInt64
constexpr int kEmbedderDataSlotSize
constexpr int kPCOnStackSize
constexpr int kPointerSize
@ USE_DEFAULT_MINIMUM_CAPACITY
@ USE_CUSTOM_MINIMUM_CAPACITY
uint32_t ObjectHash(Address address)
constexpr size_t kJSDispatchTableReservationSize
@ kFirstImmutableLexicalVariableMode
@ kPrivateGetterAndSetter
@ kLastLexicalVariableMode
constexpr bool IsSynchronous(ConcurrencyMode mode)
const Address kWeakHeapObjectMask
bool IsBaselineCodeFlushingEnabled(base::EnumSet< CodeFlushMode > mode)
constexpr intptr_t kCodeAlignment
constexpr uint16_t kDontAdaptArgumentsSentinel
REPLMode construct_repl_mode(bool is_repl_mode)
constexpr uint64_t kHoleNanInt64
constexpr int kMaxDoubleStringLength
constexpr uint32_t kDefaultMaxWasmCodeSpaceSizeMb
Tagged_t TrustedPointer_t
const char * InlineCacheState2String(InlineCacheState state)
bool IsPrivateMethodVariableMode(VariableMode mode)
@ kCompactionSpaceForMinorMarkSweep
@ kCompactionSpaceForMarkCompact
@ kCompactionSpaceForScavenge
constexpr int kSmallOrderedHashSetMinCapacity
F FUNCTION_CAST(uint8_t *addr)
constexpr size_t kMinExpectedOSPageSize
constexpr uint64_t kMaxSafeIntegerUint64
constexpr int kSystemPointerSizeLog2
base::StrongAlias< JSDispatchHandleAliasTag, uint32_t > JSDispatchHandle
constexpr uint32_t kMaxCommittedWasmCodeMB
constexpr intptr_t kObjectAlignment8GbHeapMask
constexpr int kFPOnStackSize
constexpr int kScopeInfoMaxInlinedLocalNamesSize
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in allocation gc speed threshold for starting incremental marking via a task in percent of available threshold for starting incremental marking immediately in percent of available Use a single schedule for determining a marking schedule between JS and C objects schedules the minor GC task with kUserVisible priority max worker number of concurrent for NumberOfWorkerThreads start background threads that allocate memory concurrent_array_buffer_sweeping use parallel threads to clear weak refs in the atomic pause trace progress of the incremental marking trace object counts and memory usage report a tick only when allocated zone memory changes by this amount TracingFlags::gc_stats TracingFlags::gc_stats track native contexts that are expected to be garbage collected verify heap pointers before and after GC memory reducer runs GC with ReduceMemoryFootprint flag Maximum number of memory reducer GCs scheduled Old gen GC speed is computed directly from gc tracer counters Perform compaction on full GCs based on V8 s default heuristics Perform compaction on every full GC Perform code space compaction when finalizing a full GC with stack Stress GC compaction to flush out bugs with moving objects flush of baseline code when it has not been executed recently Use time base code flushing instead of age Use a progress bar to scan large objects in increments when incremental marking is active force incremental marking for small heaps and run it more often force marking at random points between and force scavenge at random points between and reclaim otherwise unreachable unmodified wrapper objects when possible less compaction in non memory reducing mode use high priority threads for concurrent Marking Test mode only flag It allows an unit test to select evacuation candidates use incremental marking for CppHeap cppheap_concurrent_marking c value for membalancer A special constant to balance between memory and space tradeoff The smaller the more memory it uses enable use of SSE4 instructions if available enable use of AVX VNNI instructions if available enable use of POPCNT instruction if available force all emitted branches to be in long mode(MIPS/PPC only)") DEFINE_BOOL(partial_constant_pool
constexpr int kJSArgcReceiverSlots
constexpr int kFunctionExitBytecodeOffset
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
constexpr intptr_t kCodeAlignmentMask
constexpr size_t kReservedCodeRangePages
constexpr bool IsAnyCodeSpace(AllocationSpace space)
constexpr int kUIntptrSize
bool IsImmutableLexicalVariableMode(VariableMode mode)
constexpr uint32_t kTracedHandleMinorGCWeakResetZapValue
constexpr int kInvalidInfoId
KeyedAccessLoadMode GeneralizeKeyedAccessLoadMode(KeyedAccessLoadMode mode1, KeyedAccessLoadMode mode2)
constexpr int64_t kMaxAdditiveSafeInteger
constexpr int kSimd256Size
uint32_t IndirectPointerHandle
constexpr int kSystemPointerSize
const char * LanguageMode2String(LanguageMode mode)
constexpr intptr_t kObjectAlignment8GbHeap
constexpr bool IsRequestTurbofan(TieringState state)
constexpr int kAdditiveSafeIntegerBitLength
KeyedAccessLoadMode CreateKeyedAccessLoadMode(bool handle_oob, bool handle_holes)
@ SLOPPY_FUNCTION_NAME_VARIABLE
@ SLOPPY_BLOCK_FUNCTION_VARIABLE
static constexpr bool kCompressGraphZone
constexpr int kStackLimitSlackForDeoptimizationInBytes
constexpr int kTaggedSizeLog2
constexpr int kEmbedderDataSlotSizeInTaggedSlots
constexpr int kCodeAlignmentBits
constexpr intptr_t kObjectAlignmentMask
@ ONLY_SINGLE_FUNCTION_LITERAL
constexpr size_t kMinimumCodeRangeSize
Address ExternalPointer_t
constexpr uint64_t kMaxUInt64
constexpr uint32_t kDebugZapValue
constexpr int kElidedFrameSlots
constexpr JSDispatchHandle kNullJSDispatchHandle(0)
constexpr uint32_t kTracedHandleMinorGCResetZapValue
constexpr uint32_t kZapValue
constexpr int kBitsPerInt
constexpr bool SmiValuesAre31Bits()
constexpr AdaptArguments kDontAdapt
constexpr DeoptimizeKind kLastDeoptimizeKind
constexpr uint32_t kGlobalHandleZapValue
constexpr bool IsAnyTrustedSpace(AllocationSpace space)
constexpr JSDispatchHandle kPlaceholderDispatchHandle(0x0)
refactor address components for immediate indexing make OptimizeMaglevOnNextCall optimize to turbofan instead of maglev filter for tracing turbofan compilation trace turbo cfg trace TurboFan s graph trimmer trace TurboFan s control equivalence trace TurboFan s register allocator trace stack load store counters for optimized code in run fuzzing &&concurrent_recompilation trace_turbo trace_turbo_scheduled trace_turbo_stack_accesses verify TurboFan machine graph of code stubs enable FixedArray bounds checks print TurboFan statistics of wasm compilations maximum cumulative size of bytecode considered for inlining scale factor of bytecode size used to calculate the inlining budget * KB
constexpr int kDeoptimizeKindCount
constexpr int kExternalPointerSlotSize
bool IsFlushingDisabled(base::EnumSet< CodeFlushMode > mode)
constexpr int kSwissNameDictionaryInitialCapacity
constexpr uint32_t kClearedFreeMemoryValue
constexpr int kFunctionLiteralIdTopLevel
constexpr int kIndirectPointerSize
constexpr uint32_t kHoleNanLower32
bool is_strict(LanguageMode language_mode)
constexpr int kTrustedPointerSize
@ SHARED_TRUSTED_LO_SPACE
@ FIRST_GROWABLE_PAGED_SPACE
@ LAST_GROWABLE_PAGED_SPACE
constexpr AdaptArguments kAdapt
constexpr bool kPlatformRequiresCodeRange
bool StoreModeIgnoresTypeArrayOOB(KeyedAccessStoreMode store_mode)
constexpr uint64_t kQuietNaNMask
constexpr int kCodeZapValue
bool IsPrivateAccessorVariableMode(VariableMode mode)
constexpr size_t kMaxJSDispatchEntries
constexpr int JSParameterCount(int param_count_without_receiver)
constexpr uint32_t kTracedHandleFullGCResetZapValue
constexpr bool SmiValuesAre32Bits()
constexpr int kBinary32MantissaBits
constexpr uint32_t kMinUInt32
constexpr int kCppHeapPointerSlotSize
bool(*)(Heap *heap, FullObjectSlot pointer) WeakSlotCallbackWithHeap
constexpr uint32_t kHoleNanUpper32
constexpr bool IsRequestMaglev(TieringState state)
constexpr int kUInt32Size
static constexpr bool kTieringStateInProgressBlocksTierup
bool IsPrivateMethodOrAccessorVariableMode(VariableMode mode)
base::AtomicWord AtomicTagged_t
constexpr uint32_t kFreeListZapValue
constexpr int kJSDispatchTableEntrySizeLog2
DefineKeyedOwnPropertyFlag
bool IsSerializableVariableMode(VariableMode mode)
constexpr int kBitsPerSystemPointer
constexpr bool IsAnyNewSpace(AllocationSpace space)
DefineKeyedOwnPropertyInLiteralFlag
@ kExternalUint8ClampedArray
@ kExternalBigUint64Array
constexpr uint32_t kQuietNaNHighBitsMask
@ kEnumCacheKeysAndIndices
constexpr intptr_t kIntptrSignBit
constexpr size_t kMaximalCodeRangeSize
constexpr bool kIsSmiValueInUpper32Bits
constexpr int kUInt16Size
constexpr intptr_t kSmiSignMask
bool operator==(ExternalReference lhs, ExternalReference rhs)
bool IsDynamicVariableMode(VariableMode mode)
constexpr int kAdditiveSafeIntegerShift
bool IsImmutableLexicalOrPrivateVariableMode(VariableMode mode)
static constexpr uint32_t kNoneOrInProgressMask
constexpr int kDoubleSizeLog2
LanguageMode construct_language_mode(bool strict_bit)
bool LoadModeHandlesHoles(KeyedAccessLoadMode load_mode)
constexpr int kIeeeDoubleExponentWordOffset
constexpr int kBitsPerByteLog2
V8_INLINE bool operator!(ExceptionStatus status)
constexpr double kMinSafeInteger
constexpr int kGarbageCollectionReasonMaxValue
constexpr int kStackSpaceRequiredForCompilation
@ kStreamingCompileForeground
@ kStreamingCompileBackground
constexpr int kDoubleSize
constexpr intptr_t kDoubleAlignmentMask
constexpr int kBitsPerSystemPointerLog2
DECLARE_ENUM(enum_item, ignore)
constexpr int kNoDeoptimizationId
const uint32_t kClearedWeakHeapObjectLower32
constexpr uint32_t kBinary32MantissaMask
bool StoreModeSupportsTypeArray(KeyedAccessStoreMode store_mode)
constexpr int64_t kMinAdditiveSafeInteger
constexpr size_t kExternalAllocationSoftLimit
constexpr uint32_t kSlotsZapValue
constexpr uint64_t kInvalidWasmSignatureHash
constexpr uint32_t kMaxUInt32
constexpr intptr_t kPointerAlignmentMask
constexpr int kObjectAlignmentBits
bool LoadModeHandlesOOB(KeyedAccessLoadMode load_mode)
constexpr bool StaticStringsEqual(const char *s1, const char *s2)
constexpr bool IsConcurrent(ConcurrencyMode mode)
constexpr int kIeeeDoubleMantissaWordOffset
IeeeDoubleBigEndianArchType IeeeDoubleArchType
constexpr int kFloat16Size
std::pair< const char *, int > FileAndLine
constexpr intptr_t kDoubleAlignment
V8HeapCompressionSchemeImpl< MainCage > V8HeapCompressionScheme
constexpr uint32_t kBinary32ExponentMask
constexpr int kJSDispatchTableEntrySize
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in allocation gc speed threshold for starting incremental marking via a task in percent of available threshold for starting incremental marking immediately in percent of available Use a single schedule for determining a marking schedule between JS and C objects schedules the minor GC task with kUserVisible priority max worker number of concurrent for NumberOfWorkerThreads start background threads that allocate memory concurrent_array_buffer_sweeping use parallel threads to clear weak refs in the atomic pause trace progress of the incremental marking trace object counts and memory usage * MB
const char * ImmutableLexicalVariableModeToString(VariableMode mode)
constexpr int kIntptrSize
constexpr bool kIsSmiValueInLower32Bits
constexpr bool IsAnySharedSpace(AllocationSpace space)
static const size_t LanguageModeSize
constexpr uint32_t kHandleZapValue
static constexpr ReleaseStoreTag kReleaseStore
V8_INLINE Local< Primitive > Null(Isolate *isolate)
static constexpr SeqCstAccessTag kSeqCstAccess
static constexpr RelaxedLoadTag kRelaxedLoad
V8_INLINE Local< Primitive > Undefined(Isolate *isolate)
static constexpr RelaxedStoreTag kRelaxedStore
static constexpr AcquireLoadTag kAcquireLoad
#define DCHECK_EQ(v1, v2)
AssemblerDebugInfo(const char *name, const char *file, int line)
OffHeapFullObjectSlot TInstructionStreamSlot
FullMaybeObjectSlot TMaybeObjectSlot
OffHeapFullObjectSlot TOffHeapObjectSlot
FullObjectSlot TObjectSlot
TObjectSlot TProtectedPointerSlot
FullHeapObjectSlot THeapObjectSlot
TMaybeObjectSlot TProtectedMaybeObjectSlot
struct v8::internal::IeeeDoubleBigEndianArchType::@33 bits
struct v8::internal::IeeeDoubleLittleEndianArchType::@32 bits