46#include "third_party/fp16/src/include/fp16.h"
48#if V8_ENABLE_WEBASSEMBLY
70constexpr struct alignas(16) {
80 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF};
82constexpr struct alignas(16) {
92 0x8000, 0x8000, 0x8000, 0x8000};
94constexpr struct alignas(16) {
101constexpr struct alignas(16) {
108constexpr struct alignas(16) {
112 uint64_t{0x7FFFFFFFFFFFFFFF}};
114constexpr struct alignas(16) {
118 uint64_t{0x8000000000000000}};
120constexpr struct alignas(16) {
124 uint64_t{0x70707070'70707070}};
126constexpr struct alignas(16) {
130 uint64_t{0x04030302'03020201}};
132constexpr struct alignas(16) {
136 uint64_t{0x01010101'01010101}};
138constexpr struct alignas(16) {
142 uint64_t{0x0F0F0F0F'0F0F0F0F}};
144constexpr struct alignas(16) {
148 uint64_t{0x33333333'33333333}};
150constexpr struct alignas(16) {
154 uint64_t{0x55555555'55555555}};
156constexpr struct alignas(16) {
160 uint64_t{0x00010001'00010001}};
162constexpr struct alignas(16) {
166 uint64_t{0x4330000043300000}};
168constexpr struct alignas(16) {
172 uint64_t{0x4330000000000000}};
174constexpr struct alignas(16) {
178 uint64_t{0x41dfffffffc00000}};
180constexpr struct alignas(16) {
184 uint64_t{0x41efffffffe00000}};
187constexpr struct alignas(16) {
193 uint32_t{0x4f00'0000},
194 uint32_t{0x4f00'0000},
195 uint32_t{0x4f00'0000},
196 uint32_t{0x4f00'0000},
199constexpr struct alignas(16) {
209 uint32_t{0x4f00'0000}, uint32_t{0x4f00'0000}, uint32_t{0x4f00'0000},
210 uint32_t{0x4f00'0000}, uint32_t{0x4f00'0000}, uint32_t{0x4f00'0000},
211 uint32_t{0x4f00'0000}, uint32_t{0x4f00'0000},
231 return static_cast<int32_t
>(
236 switch (result_size) {
253 const CFunctionInfo*
const* c_signatures,
unsigned num_functions) {
254#ifdef V8_USE_SIMULATOR_WITH_GENERIC_C_CALLS
255 isolate->simulator_data()->RegisterFunctionsAndSignatures(
256 c_functions, c_signatures, num_functions);
299#ifdef V8_ENABLE_SANDBOX
300ExternalReference ExternalReference::sandbox_base_address() {
304ExternalReference ExternalReference::sandbox_end_address() {
308ExternalReference ExternalReference::empty_backing_store_buffer() {
310 Sandbox::current()->constants().empty_backing_store_buffer_address());
313ExternalReference ExternalReference::external_pointer_table_address(
319ExternalReference::shared_external_pointer_table_address_address(
322 isolate->shared_external_pointer_table_address_address());
325ExternalReference ExternalReference::trusted_pointer_table_base_address(
332ExternalReference ExternalReference::shared_trusted_pointer_table_base_address(
337 isolate->shared_trusted_pointer_table_base_address());
345ExternalReference ExternalReference::code_pointer_table_base_address(
350#ifndef V8_COMPRESS_POINTERS_IN_MULTIPLE_CAGES
351ExternalReference ExternalReference::global_code_pointer_table_base_address() {
357ExternalReference ExternalReference::memory_chunk_metadata_table_address() {
359 reinterpret_cast<Address>(MemoryChunk::MetadataTableAddress()));
364#ifdef V8_ENABLE_LEAPTIERING
366ExternalReference ExternalReference::js_dispatch_table_address() {
374ExternalReference ExternalReference::interpreter_dispatch_table_address(
379ExternalReference ExternalReference::interpreter_dispatch_counters(
382 isolate->interpreter()->bytecode_dispatch_counters_table());
386ExternalReference::address_of_interpreter_entry_trampoline_instruction_start(
389 isolate->interpreter()
390 ->address_of_interpreter_entry_trampoline_instruction_start());
393ExternalReference ExternalReference::bytecode_size_table_address() {
421constexpr bool AllScalar() {
422 return std::is_scalar_v<T> || std::is_void_v<T>;
425template <
typename T1,
typename T2,
typename... Rest>
426constexpr bool AllScalar() {
427 return AllScalar<T1>() && AllScalar<
T2, Rest...>();
435struct IsValidExternalReferenceType;
437template <
typename Result,
typename... Args>
438struct IsValidExternalReferenceType<Result (*)(Args...)> {
439 static const bool value = AllScalar<Result, Args...>();
442template <
typename Result,
typename Class,
typename... Args>
443struct IsValidExternalReferenceType<Result (Class::*)(Args...)> {
444 static const bool value = AllScalar<Result, Args...>();
451#define RAW_FUNCTION_REFERENCE(Name, Target) \
452 ExternalReference ExternalReference::Name() { \
453 return ExternalReference(FUNCTION_ADDR(Target)); \
457#define FUNCTION_REFERENCE(Name, Target) \
458 ExternalReference ExternalReference::Name() { \
459 static_assert(IsValidExternalReferenceType<decltype(&Target)>::value); \
460 return ExternalReference(Redirect(FUNCTION_ADDR(Target))); \
463#define FUNCTION_REFERENCE_WITH_TYPE(Name, Target, Type) \
464 ExternalReference ExternalReference::Name() { \
465 static_assert(IsValidExternalReferenceType<decltype(&Target)>::value); \
466 return ExternalReference(Redirect(FUNCTION_ADDR(Target), Type)); \
475 uint64_t input =
static_cast<uint64_t
>(
hi) << 32 |
lo;
482 float value = fp16_ieee_to_fp32_value(input);
483 return std::bit_cast<uint32_t, float>(value);
508 Heap::InsertIntoRememberedSetFromCode)
516 return isolate->debug()->BreakAtEntry(sfi) ? 1 : 0;
523 std::optional<Tagged<DebugInfo>> debug_info =
524 isolate->debug()->TryGetDebugInfo(sfi);
525 if (debug_info.has_value() && debug_info.value()->HasCoverageInfo()) {
526 return debug_info.value()->coverage_info().ptr();
544#ifdef V8_ENABLE_SANDBOX
545 return isolate->external_pointer_table().AllocateAndInitializeEntry(
546 isolate->heap()->young_external_pointer_space(), pointer,
566 return runtime_function_table_address(isolate);
572 return SimulatorBase::RedirectExternalReference(external_function, type);
574 return external_function;
581 return SimulatorBase::UnwrapRedirection(redirection_trampoline);
583 return redirection_trampoline;
591ExternalReference ExternalReference::force_slow_path(
Isolate* isolate) {
600#ifdef V8_ENABLE_CET_SHADOW_STACK
605#ifdef V8_ENABLE_WEBASSEMBLY
707 BUILTIN_FP_POINTER_CALL)
712#define V(Name) RAW_FUNCTION_REFERENCE(wasm_##Name, wasm::Name)
728void* allocate_buffer_impl(Isolate* isolate,
size_t size) {
730 isolate->heap()->cpp_heap()->GetAllocationHandle(),
741 double input = ReadUnalignedValue<double>(data);
748 double input = ReadUnalignedValue<double>(data);
756 double dividend = ReadUnalignedValue<double>(data);
757 double divisor = ReadUnalignedValue<double>(data +
sizeof(dividend));
758 WriteUnalignedValue<double>(data,
Modulo(dividend, divisor));
763ExternalReference ExternalReference::isolate_root(
Isolate* isolate) {
767ExternalReference ExternalReference::allocation_sites_list_address(
772ExternalReference ExternalReference::address_of_jslimit(Isolate* isolate) {
775 DCHECK(isolate->root_register_addressable_region().contains(
address));
779ExternalReference ExternalReference::address_of_no_heap_write_interrupt_request(
781 Address address = isolate->stack_guard()->address_of_interrupt_request(
784 DCHECK(isolate->root_register_addressable_region().contains(
address));
788ExternalReference ExternalReference::address_of_real_jslimit(Isolate* isolate) {
789 Address address = isolate->stack_guard()->address_of_real_jslimit();
791 DCHECK(isolate->root_register_addressable_region().contains(
address));
795ExternalReference ExternalReference::heap_is_marking_flag_address(
800ExternalReference ExternalReference::heap_is_minor_marking_flag_address(
805ExternalReference ExternalReference::is_shared_space_isolate_flag_address(
808 isolate->isolate_data()->is_shared_space_isolate_flag_address());
811ExternalReference ExternalReference::new_space_allocation_top_address(
816ExternalReference ExternalReference::new_space_allocation_limit_address(
821ExternalReference ExternalReference::old_space_allocation_top_address(
826ExternalReference ExternalReference::old_space_allocation_limit_address(
831ExternalReference ExternalReference::array_buffer_max_allocation_address(
836ExternalReference ExternalReference::handle_scope_level_address(
841ExternalReference ExternalReference::handle_scope_next_address(
846ExternalReference ExternalReference::handle_scope_limit_address(
851ExternalReference ExternalReference::exception_address(Isolate* isolate) {
867ExternalReference ExternalReference::address_of_min_int() {
872ExternalReference::address_of_mock_arraybuffer_allocator_flag() {
878ExternalReference ExternalReference::address_of_log_or_trace_osr() {
882ExternalReference ExternalReference::address_of_builtin_subclassing_flag() {
886ExternalReference ExternalReference::address_of_runtime_stats_flag() {
890ExternalReference ExternalReference::address_of_shared_string_table_flag() {
894#ifdef V8_ENABLE_CET_SHADOW_STACK
895ExternalReference ExternalReference::address_of_cet_compatible_flag() {
900ExternalReference ExternalReference::script_context_mutable_heap_number_flag() {
904ExternalReference ExternalReference::additive_safe_int_feedback_flag() {
905#ifdef V8_TARGET_ARCH_64_BIT
912ExternalReference ExternalReference::script_context_mutable_heap_int32_flag() {
913#ifdef SUPPORT_SCRIPT_CONTEXT_MUTABLE_HEAP_INT32
921 const char* function_name) {
927 const char* function_name) {
937ExternalReference ExternalReference::address_of_the_hole_nan() {
942ExternalReference ExternalReference::address_of_uint32_bias() {
947ExternalReference ExternalReference::address_of_fp16_abs_constant() {
951ExternalReference ExternalReference::address_of_fp16_neg_constant() {
955ExternalReference ExternalReference::address_of_float_abs_constant() {
959ExternalReference ExternalReference::address_of_float_neg_constant() {
963ExternalReference ExternalReference::address_of_double_abs_constant() {
968ExternalReference ExternalReference::address_of_double_neg_constant() {
972ExternalReference ExternalReference::address_of_wasm_i8x16_swizzle_mask() {
976ExternalReference ExternalReference::address_of_wasm_i8x16_popcnt_mask() {
980ExternalReference ExternalReference::address_of_wasm_i8x16_splat_0x01() {
984ExternalReference ExternalReference::address_of_wasm_i8x16_splat_0x0f() {
988ExternalReference ExternalReference::address_of_wasm_i8x16_splat_0x33() {
992ExternalReference ExternalReference::address_of_wasm_i8x16_splat_0x55() {
996ExternalReference ExternalReference::address_of_wasm_i16x8_splat_0x0001() {
1001ExternalReference::address_of_wasm_f64x2_convert_low_i32x4_u_int_mask() {
1006ExternalReference ExternalReference::supports_wasm_simd_128_address() {
1011ExternalReference ExternalReference::address_of_wasm_double_2_power_52() {
1015ExternalReference ExternalReference::address_of_wasm_int32_max_as_double() {
1020ExternalReference ExternalReference::address_of_wasm_uint32_max_as_double() {
1025ExternalReference ExternalReference::address_of_wasm_int32_overflow_as_float() {
1031ExternalReference::address_of_wasm_i32x8_int32_overflow_as_float() {
1036ExternalReference ExternalReference::supports_cetss_address() {
1042ExternalReference::address_of_enable_experimental_regexp_engine() {
1048static uintptr_t BaselinePCForBytecodeOffset(
Address raw_code_obj,
1049 int bytecode_offset,
1054 return code_obj->GetBaselineStartPCForBytecodeOffset(bytecode_offset,
1058static uintptr_t BaselinePCForNextExecutedBytecode(
Address raw_code_obj,
1059 int bytecode_offset,
1064 return code_obj->GetBaselinePCForNextExecutedBytecode(bytecode_offset,
1072 BaselinePCForNextExecutedBytecode)
1079ExternalReference ExternalReference::invoke_function_callback_generic() {
1086ExternalReference ExternalReference::invoke_function_callback_optimized() {
1089 ApiFunction thunk_fun(thunk_address);
1098 return invoke_function_callback_generic();
1100 return invoke_function_callback_optimized();
1113#if V8_TARGET_ARCH_X64
1114#define re_stack_check_func RegExpMacroAssemblerX64::CheckStackGuardState
1115#elif V8_TARGET_ARCH_IA32
1116#define re_stack_check_func RegExpMacroAssemblerIA32::CheckStackGuardState
1117#elif V8_TARGET_ARCH_ARM64
1118#define re_stack_check_func RegExpMacroAssemblerARM64::CheckStackGuardState
1119#elif V8_TARGET_ARCH_ARM
1120#define re_stack_check_func RegExpMacroAssemblerARM::CheckStackGuardState
1121#elif V8_TARGET_ARCH_PPC64
1122#define re_stack_check_func RegExpMacroAssemblerPPC::CheckStackGuardState
1123#elif V8_TARGET_ARCH_MIPS64
1124#define re_stack_check_func RegExpMacroAssemblerMIPS::CheckStackGuardState
1125#elif V8_TARGET_ARCH_LOONG64
1126#define re_stack_check_func RegExpMacroAssemblerLOONG64::CheckStackGuardState
1127#elif V8_TARGET_ARCH_S390X
1128#define re_stack_check_func RegExpMacroAssemblerS390::CheckStackGuardState
1129#elif V8_TARGET_ARCH_RISCV32 || V8_TARGET_ARCH_RISCV64
1130#define re_stack_check_func RegExpMacroAssemblerRISCV::CheckStackGuardState
1136#undef re_stack_check_func
1166ExternalReference::address_of_regexp_static_result_offsets_vector(
1169 isolate->address_of_regexp_static_result_offsets_vector());
1172ExternalReference ExternalReference::address_of_regexp_stack_limit_address(
1177ExternalReference ExternalReference::address_of_regexp_stack_memory_top_address(
1180 isolate->regexp_stack()->memory_top_address_address());
1183ExternalReference ExternalReference::address_of_regexp_stack_stack_pointer(
1227#if defined(V8_USE_LIBM_TRIG_FUNCTIONS)
1230 IsValidExternalReferenceType<
decltype(&base::ieee754::libm_sin)>
::value);
1231 static_assert(IsValidExternalReferenceType<
1232 decltype(&base::ieee754::fdlibm_sin)>
::value);
1233 auto* f =
v8_flags.use_libm_trig_functions ? base::ieee754::libm_sin
1234 : base::ieee754::fdlibm_sin;
1237ExternalReference ExternalReference::ieee754_cos_function() {
1239 IsValidExternalReferenceType<
decltype(&base::ieee754::libm_cos)>
::value);
1240 static_assert(IsValidExternalReferenceType<
1241 decltype(&base::ieee754::fdlibm_cos)>
::value);
1242 auto* f =
v8_flags.use_libm_trig_functions ? base::ieee754::libm_cos
1243 : base::ieee754::fdlibm_cos;
1260 return memcpy(dest, src, n);
1266 return memmove(dest, src, n);
1272 DCHECK_EQ(
static_cast<uint8_t
>(value), value);
1273 return memset(dest, value, n);
1279 volatile const base::Atomic8* src,
size_t n) {
1286 volatile const base::Atomic8* src,
size_t n) {
1292ExternalReference ExternalReference::printf_function() {
1298template <
typename SubjectChar,
typename PatternChar>
1313ExternalReference ExternalReference::search_string_raw_one_two() {
1317ExternalReference ExternalReference::search_string_raw_two_one() {
1321ExternalReference ExternalReference::search_string_raw_two_two() {
1326ExternalReference::typed_array_and_rab_gsab_typed_array_elements_kind_shifts() {
1333ExternalReference::typed_array_and_rab_gsab_typed_array_elements_kind_sizes() {
1341void StringWriteToFlatOneByte(
Address source, uint8_t* sink, int32_t
start,
1344 sink,
start, length);
1347void StringWriteToFlatTwoByte(
Address source, uint16_t* sink, int32_t
start,
1350 sink,
start, length);
1353const uint8_t* ExternalOneByteStringGetChars(
Address string) {
1378 ExternalOneByteStringGetChars)
1380 ExternalTwoByteStringGetChars)
1385 0x100000000, 0x1fffffff6, 0x1fffffff6, 0x1fffffff6, 0x2ffffff9c,
1386 0x2ffffff9c, 0x2ffffff9c, 0x3fffffc18, 0x3fffffc18, 0x3fffffc18,
1387 0x4ffffd8f0, 0x4ffffd8f0, 0x4ffffd8f0, 0x4ffffd8f0, 0x5fffe7960,
1388 0x5fffe7960, 0x5fffe7960, 0x6fff0bdc0, 0x6fff0bdc0, 0x6fff0bdc0,
1389 0x7ff676980, 0x7ff676980, 0x7ff676980, 0x7ff676980, 0x8fa0a1f00,
1390 0x8fa0a1f00, 0x8fa0a1f00, 0x9c4653600, 0x9c4653600, 0x9c4653600,
1391 0xa00000000, 0xa00000000,
1394ExternalReference ExternalReference::address_of_log10_offset_table() {
1415static uint32_t ComputeSeededIntegerHash(
Isolate* isolate, int32_t
key) {
1423template <
typename Dictionary, LookupMode mode>
1438 uint32_t hash =
key->hash();
1440 ? dict->FindEntry(isolate, roots,
key, hash)
1441 : dict->FindInsertionEntry(isolate, roots, hash);
1446 name_dictionary_lookup_forwarded_string,
1449 name_dictionary_find_insertion_entry_forwarded_string,
1452 global_dictionary_lookup_forwarded_string,
1458 name_to_index_hashtable_lookup_forwarded_string,
1461 name_to_index_hashtable_find_insertion_entry_forwarded_string,
1491uint32_t HasUnpairedSurrogate(const uint16_t* code_units,
size_t length) {
1493 static constexpr uint32_t
kTrue = 1;
1502 uint16_t* dest_code_units,
size_t length) {
1504 dest_code_units, length);
1565#ifdef V8_INTL_SUPPORT
1574ExternalReference ExternalReference::intl_to_latin1_lower_table() {
1579ExternalReference ExternalReference::intl_ascii_collation_weights_l1() {
1584ExternalReference ExternalReference::intl_ascii_collation_weights_l3() {
1592template ExternalReference
1595ExternalReference::search_string_raw<const uint8_t, const base::uc16>();
1597ExternalReference::search_string_raw<const base::uc16, const uint8_t>();
1599ExternalReference::search_string_raw<const base::uc16, const base::uc16>();
1613ExternalReference ExternalReference::promise_hook_flags_address(
1618ExternalReference ExternalReference::promise_hook_address(Isolate* isolate) {
1622ExternalReference ExternalReference::async_event_delegate_address(
1627ExternalReference ExternalReference::debug_is_active_address(Isolate* isolate) {
1631ExternalReference ExternalReference::debug_hook_on_function_call_address(
1636ExternalReference ExternalReference::runtime_function_table_address(
1650double modulo_double_double(
double x,
double y) {
return Modulo(
x,
y); }
1660ExternalReference ExternalReference::context_address(
Isolate* isolate) {
1673 return std::atomic_load(
reinterpret_cast<std::atomic<int64_t>*
>(address));
1676ExternalReference ExternalReference::atomic_pair_load_function() {
1682 static_cast<int64_t
>(value_high) << 32 | (value_low & 0xFFFFFFFF);
1683 std::atomic_store(
reinterpret_cast<std::atomic<int64_t>*
>(address), value);
1686ExternalReference ExternalReference::atomic_pair_store_function() {
1693 static_cast<int64_t
>(value_high) << 32 | (value_low & 0xFFFFFFFF);
1694 return std::atomic_fetch_add(
reinterpret_cast<std::atomic<int64_t>*
>(address),
1698ExternalReference ExternalReference::atomic_pair_add_function() {
1705 static_cast<int64_t
>(value_high) << 32 | (value_low & 0xFFFFFFFF);
1706 return std::atomic_fetch_sub(
reinterpret_cast<std::atomic<int64_t>*
>(address),
1710ExternalReference ExternalReference::atomic_pair_sub_function() {
1717 static_cast<int64_t
>(value_high) << 32 | (value_low & 0xFFFFFFFF);
1718 return std::atomic_fetch_and(
reinterpret_cast<std::atomic<int64_t>*
>(address),
1722ExternalReference ExternalReference::atomic_pair_and_function() {
1728 static_cast<int64_t
>(value_high) << 32 | (value_low & 0xFFFFFFFF);
1729 return std::atomic_fetch_or(
reinterpret_cast<std::atomic<int64_t>*
>(address),
1733ExternalReference ExternalReference::atomic_pair_or_function() {
1740 static_cast<int64_t
>(value_high) << 32 | (value_low & 0xFFFFFFFF);
1741 return std::atomic_fetch_xor(
reinterpret_cast<std::atomic<int64_t>*
>(address),
1745ExternalReference ExternalReference::atomic_pair_xor_function() {
1752 static_cast<int64_t
>(value_high) << 32 | (value_low & 0xFFFFFFFF);
1753 return std::atomic_exchange(
reinterpret_cast<std::atomic<int64_t>*
>(address),
1757ExternalReference ExternalReference::atomic_pair_exchange_function() {
1765 int new_value_high) {
1766 uint64_t old_value =
static_cast<uint64_t
>(old_value_high) << 32 |
1767 (old_value_low & 0xFFFFFFFF);
1768 uint64_t new_value =
static_cast<uint64_t
>(new_value_high) << 32 |
1769 (new_value_low & 0xFFFFFFFF);
1770 std::atomic_compare_exchange_strong(
1771 reinterpret_cast<std::atomic<uint64_t>*
>(address), &old_value, new_value);
1786void tsan_relaxed_store_8_bits(
Address addr, int64_t value) {
1787#if V8_TARGET_ARCH_X64
1795void tsan_relaxed_store_16_bits(
Address addr, int64_t value) {
1796#if V8_TARGET_ARCH_X64
1804void tsan_relaxed_store_32_bits(
Address addr, int64_t value) {
1805#if V8_TARGET_ARCH_X64
1813void tsan_relaxed_store_64_bits(
Address addr, int64_t value) {
1814#if V8_TARGET_ARCH_X64
1816 static_cast<base::Atomic64
>(value));
1823void tsan_seq_cst_store_8_bits(
Address addr, int64_t value) {
1824#if V8_TARGET_ARCH_X64
1832void tsan_seq_cst_store_16_bits(
Address addr, int64_t value) {
1833#if V8_TARGET_ARCH_X64
1841void tsan_seq_cst_store_32_bits(
Address addr, int64_t value) {
1842#if V8_TARGET_ARCH_X64
1850void tsan_seq_cst_store_64_bits(
Address addr, int64_t value) {
1851#if V8_TARGET_ARCH_X64
1853 static_cast<base::Atomic64
>(value));
1861#if V8_TARGET_ARCH_X64
1868base::Atomic64 tsan_relaxed_load_64_bits(
Address addr, int64_t value) {
1869#if V8_TARGET_ARCH_X64
1880 tsan_relaxed_store_8_bits)
1882 tsan_relaxed_store_16_bits)
1884 tsan_relaxed_store_32_bits)
1886 tsan_relaxed_store_64_bits)
1888 tsan_seq_cst_store_8_bits)
1890 tsan_seq_cst_store_16_bits)
1892 tsan_seq_cst_store_32_bits)
1894 tsan_seq_cst_store_64_bits)
1896 tsan_relaxed_load_32_bits)
1898 tsan_relaxed_load_64_bits)
1904 hsi->EnterContext(context);
1911 return lhs.raw() == rhs.raw();
1915 return !(lhs == rhs);
1928static constexpr const char* GetNameOfIsolateFieldId(
IsolateFieldId id) {
1930#define CASE(id, name, camel) \
1931 case IsolateFieldId::k##camel: \
1935#define CASE(camel, size, name) \
1936 case IsolateFieldId::k##camel: \
1947 os << reinterpret_cast<const void*>(reference.
raw());
1955 if (
fn) os <<
" <" <<
fn->name <<
".entry>";
1963 base::OS::PrintError(
"abort: %s\n", message);
1965 base::OS::PrintError(
"abort: <unknown reason: %d>\n", reason);
1971#undef RAW_FUNCTION_REFERENCE
1972#undef FUNCTION_REFERENCE
1973#undef FUNCTION_REFERENCE_WITH_TYPE
static void ReplaceUnpairedSurrogates(const uint16_t *source_code_units, uint16_t *dest_code_units, size_t length)
static bool HasUnpairedSurrogate(const uint16_t *code_units, size_t length)
v8::internal::Address address()
static bool supports_wasm_simd_128_
static unsigned supported_
static bool supports_cetss_
static Address EnsureValidReturnAddress(Isolate *isolate, Address address)
static Deoptimizer * New(Address raw_function, DeoptimizeKind kind, Address from, int fp_to_sp_delta, Isolate *isolate)
static Address Redirect(Address external_function, Type type=ExternalReference::BUILTIN_CALL)
static V8_EXPORT_PRIVATE ExternalReference address_of_code_pointer_table_base_address()
static V8_EXPORT_PRIVATE ExternalReference address_of_load_from_stack_count(const char *function_name)
int32_t offset_from_root_register() const
static V8_EXPORT_PRIVATE ExternalReference jslimit_address()
static ExternalReference invoke_function_callback(CallApiCallbackMode mode)
static V8_EXPORT_PRIVATE ExternalReference isolate_address()
static Address UnwrapRedirection(Address redirection_trampoline)
static V8_EXPORT_PRIVATE ExternalReference FromRawAddress(Address address)
V8_EXPORT_PRIVATE static V8_NOINLINE ExternalReference runtime_function_table_address_for_unittests(Isolate *isolate)
static V8_EXPORT_PRIVATE ExternalReference address_of_pending_message(LocalIsolate *local_isolate)
bool IsIsolateFieldId() const
V8_EXPORT_PRIVATE Address address() const
static V8_EXPORT_PRIVATE ExternalReference address_of_store_to_stack_count(const char *function_name)
static ExternalReference Create(const SCTableReference &table_ref)
static ExternalReference search_string_raw()
static V8_EXPORT_PRIVATE int Wake(Tagged< JSArrayBuffer > array_buffer, size_t addr, uint32_t num_waiters_to_wake)
static Address current_limit_address(Isolate *isolate)
static Address current_next_address(Isolate *isolate)
static Address current_level_address(Isolate *isolate)
static Tagged< String > ConvertOneByteToLower(Tagged< String > src, Tagged< String > dst)
static const uint8_t * ToLatin1LowerTable()
static const uint8_t * AsciiCollationWeightsL1()
static const uint8_t * AsciiCollationWeightsL3()
static constexpr intptr_t GetOffset(IsolateFieldId id)
static IsolateGroup * current()
static Address load_from_stack_count_address(const char *function_name)
static Address store_to_stack_count_address(const char *function_name)
static size_t GsabByteLength(Isolate *isolate, Address raw_array_buffer)
static Address ArrayJoinConcatToSequentialString(Isolate *isolate, Address raw_fixed_array, intptr_t length, Address raw_separator, Address raw_dest)
static Address GetField(Isolate *isolate, Address raw_date, Address smi_index)
static Tagged< Map > InvalidatePrototypeChains(Tagged< Map > map)
static Tagged< Smi > CreateIdentityHash(Isolate *isolate, Tagged< JSReceiver > key)
Tagged< Object > * pending_message_address()
static Address RefillCache(Isolate *isolate, Address raw_native_context)
static Address CallEnqueueMicrotask(Isolate *isolate, intptr_t microtask_queue_pointer, Address raw_microtask)
static bool IsForwardingIndex(uint32_t raw_hash_field)
static Address GrowStack(Isolate *isolate)
static Address word_character_map_address()
static V8_EXPORT_PRIVATE Tagged< Smi > GetOrCreateHash(Tagged< Object > obj, Isolate *isolate)
static Address GetHash(Isolate *isolate, Address raw_key)
static const Function * RuntimeFunctionTable(Isolate *isolate)
static V8_EXPORT_PRIVATE const Function * FunctionForId(FunctionId id)
static const Function * FunctionForEntry(Address ref)
static V8_EXPORT_PRIVATE Address LexicographicCompare(Isolate *isolate, Tagged< Smi > x, Tagged< Smi > y)
static constexpr Tagged< Smi > zero()
std::atomic< int > * GetInternalPointer()
static void WriteToFlat(Tagged< String > source, SinkCharT *sink, uint32_t start, uint32_t length)
V8_INLINE constexpr StorageType ptr() const
static Address bytecode_size_table_address()
#define FUNCTION_REFERENCE_WITH_TYPE(Name, Target, Type)
#define FUNCTION_REFERENCE(Name, Target)
#define EXTERNAL_REFERENCE_LIST_ISOLATE_FIELDS(V)
#define ISOLATE_DATA_FIELDS(V)
ZoneVector< RpoNumber > & result
V8_INLINE T * MakeGarbageCollected(AllocationHandle &handle, Args &&... args)
constexpr unsigned CountTrailingZeros(T value)
constexpr unsigned CountPopulation(T value)
int64_t SignedMulHigh64(int64_t u, int64_t v)
void Relaxed_Store(volatile Atomic8 *ptr, Atomic8 value)
Atomic8 Relaxed_Load(volatile const Atomic8 *ptr)
void Relaxed_Memmove(volatile Atomic8 *dst, volatile const Atomic8 *src, size_t bytes)
void Relaxed_Memcpy(volatile Atomic8 *dst, volatile const Atomic8 *src, size_t bytes)
void SeqCst_Store(volatile Atomic8 *ptr, Atomic8 value)
Address DebugGetCoverageInfo(Isolate *isolate, Address raw_sfi)
intptr_t DebugBreakAtEntry(Isolate *isolate, Address raw_sfi)
void f32_trunc_wrapper(Address data)
void f16x8_eq_wrapper(Address data)
void int64_to_float32_wrapper(Address data)
V8_EXPORT_PRIVATE WasmCodePointerTable * GetProcessWideWasmCodePointerTable()
void uint64_to_float32_wrapper(Address data)
void switch_stacks(Isolate *isolate, wasm::StackMemory *from)
void f16x8_min_wrapper(Address data)
int32_t memory_copy_wrapper(Address trusted_data_addr, uint32_t dst_mem_index, uint32_t src_mem_index, uintptr_t dst, uintptr_t src, uintptr_t size)
void f16x8_sqrt_wrapper(Address data)
void f16x8_qfma_wrapper(Address data)
int32_t uint64_div_wrapper(Address data)
void f64_nearest_int_wrapper(Address data)
void f16x8_floor_wrapper(Address data)
void f16x8_abs_wrapper(Address data)
uint32_t word32_rol_wrapper(uint32_t input, uint32_t shift)
void f32x4_floor_wrapper(Address data)
void f16x8_sub_wrapper(Address data)
void f16x8_sconvert_i16x8_wrapper(Address data)
Address shrink_stack(Isolate *isolate)
void float16_to_float32_wrapper(Address data)
uint32_t word32_ror_wrapper(uint32_t input, uint32_t shift)
intptr_t switch_to_the_central_stack_for_js(Isolate *isolate, Address fp)
double flat_string_to_f64(Address string_address)
Address grow_stack(Isolate *isolate, void *current_sp, size_t frame_size, size_t gap, Address current_fp)
void f16x8_demote_f64x2_zero_wrapper(Address data)
int32_t memory_init_wrapper(Address trusted_data_addr, uint32_t mem_index, uintptr_t dst, uint32_t src, uint32_t seg_index, uint32_t size)
void f16x8_pmin_wrapper(Address data)
void f16x8_lt_wrapper(Address data)
void float64_to_uint64_sat_wrapper(Address data)
void switch_from_the_central_stack(Isolate *isolate)
void f64x2_ceil_wrapper(Address data)
void f16x8_nearest_int_wrapper(Address data)
int32_t float32_to_uint64_wrapper(Address data)
void f32_nearest_int_wrapper(Address data)
int32_t float64_to_int64_wrapper(Address data)
int32_t float32_to_int64_wrapper(Address data)
void f16x8_mul_wrapper(Address data)
intptr_t switch_to_the_central_stack(Isolate *isolate, uintptr_t current_sp)
void f64x2_trunc_wrapper(Address data)
uint64_t word64_rol_wrapper(uint64_t input, uint32_t shift)
int32_t memory_fill_wrapper(Address trusted_data_addr, uint32_t mem_index, uintptr_t dst, uint8_t value, uintptr_t size)
void f16x8_neg_wrapper(Address data)
void f16x8_pmax_wrapper(Address data)
int32_t int64_div_wrapper(Address data)
void f64x2_floor_wrapper(Address data)
void f32x4_ceil_wrapper(Address data)
void f16x8_ceil_wrapper(Address data)
void float64_pow_wrapper(Address data)
void float32_to_int64_sat_wrapper(Address data)
void f32x4_trunc_wrapper(Address data)
uint64_t word64_ror_wrapper(uint64_t input, uint32_t shift)
void i16x8_uconvert_f16x8_wrapper(Address data)
void f16x8_div_wrapper(Address data)
void uint64_to_float64_wrapper(Address data)
void float64_to_int64_sat_wrapper(Address data)
void f16x8_trunc_wrapper(Address data)
void i16x8_sconvert_f16x8_wrapper(Address data)
void array_copy_wrapper(Address raw_dst_array, uint32_t dst_index, Address raw_src_array, uint32_t src_index, uint32_t length)
void array_fill_wrapper(Address raw_array, uint32_t index, uint32_t length, uint32_t emit_write_barrier, uint32_t raw_type, Address initial_value_addr)
void f16x8_demote_f32x4_zero_wrapper(Address data)
void f16x8_add_wrapper(Address data)
int32_t uint64_mod_wrapper(Address data)
void f64_ceil_wrapper(Address data)
void f32x4_nearest_int_wrapper(Address data)
void return_switch(Isolate *isolate, wasm::StackMemory *from)
void f16x8_qfms_wrapper(Address data)
void f32_floor_wrapper(Address data)
int32_t float64_to_uint64_wrapper(Address data)
void f16x8_uconvert_i16x8_wrapper(Address data)
void switch_from_the_central_stack_for_js(Isolate *isolate)
Address load_old_fp(Isolate *isolate)
void f16x8_max_wrapper(Address data)
void float32_to_float16_wrapper(Address data)
int32_t int64_mod_wrapper(Address data)
void f64_trunc_wrapper(Address data)
void f32x4_promote_low_f16x8_wrapper(Address data)
void f16x8_ne_wrapper(Address data)
void f64x2_nearest_int_wrapper(Address data)
void f32_ceil_wrapper(Address data)
void f64_floor_wrapper(Address data)
void int64_to_float64_wrapper(Address data)
void float32_to_uint64_sat_wrapper(Address data)
void f16x8_le_wrapper(Address data)
uint32_t RightShiftResultLength(Address x_addr, uint32_t x_sign, intptr_t shift)
constexpr struct v8::internal::alignas wasm_int32_max_as_double
tsan_relaxed_store_8_bits tsan_relaxed_store_32_bits tsan_seq_cst_store_8_bits tsan_seq_cst_store_32_bits tsan_relaxed_load_function_32_bits
tsan_relaxed_store_8_bits tsan_relaxed_store_32_bits tsan_seq_cst_store_function_8_bits
static int64_t atomic_pair_or(intptr_t address, int value_low, int value_high)
void MutableBigInt_BitwiseAndNegNegAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
bool operator!=(ExternalReference lhs, ExternalReference rhs)
static void f64_asin_wrapper(Address data)
constexpr struct v8::internal::alignas wasm_i8x16_splat_0x33
tsan_relaxed_store_function_8_bits
Address CheckObjectType(Address raw_value, Address raw_type, Address raw_location)
template ExternalReference ExternalReference::search_string_raw< const base::uc16, const uint8_t >()
static constexpr uint32_t kFalse
tsan_relaxed_store_8_bits tsan_relaxed_store_function_32_bits
size_t hash_value(AtomicMemoryOrder order)
static int64_t atomic_pair_add(intptr_t address, int value_low, int value_high)
void MutableBigInt_BitwiseXorNegNegAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
double Modulo(double x, double y)
constexpr uint64_t double_the_hole_nan_constant
constexpr struct v8::internal::alignas fp16_negate_constant
constexpr struct v8::internal::alignas wasm_i8x16_swizzle_mask
constexpr struct v8::internal::alignas double_absolute_constant
constexpr struct v8::internal::alignas wasm_uint32_max_as_double
void MutableBigInt_RightShiftAndCanonicalize(Address result_addr, Address x_addr, intptr_t shift, uint32_t must_round_down)
Tagged(T object) -> Tagged< T >
const uint8_t * TypedArrayAndRabGsabTypedArrayElementsKindShifts()
void * libc_memset(void *dest, int value, size_t n)
void InvokeFunctionCallbackOptimized(const v8::FunctionCallbackInfo< v8::Value > &info)
constexpr uint64_t kHoleNanInt64
uintptr_t ArrayIndexOfIncludesDouble(Address array_start, uintptr_t array_len, uintptr_t from_index, Address search_element)
BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL int character
static void f64_mod_wrapper(Address data)
void MutableBigInt_BitwiseOrNegNegAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
int32_t MutableBigInt_AbsoluteMulAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
void MutableBigInt_BitwiseOrPosPosAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
void * libc_memmove(void *dest, const void *src, size_t n)
void relaxed_memmove(volatile base::Atomic8 *dest, volatile const base::Atomic8 *src, size_t n)
int32_t MutableBigInt_AbsoluteCompare(Address x_addr, Address y_addr)
const char * GetAbortReason(AbortReason reason)
void CopyTypedArrayElementsToTypedArray(Address raw_source, Address raw_destination, uintptr_t length, uintptr_t offset)
constexpr double double_min_int_constant
void MutableBigInt_BitwiseXorPosNegAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
Address GetOrCreateHash(Isolate *isolate, Address raw_key)
void MutableBigInt_BitwiseAndPosNegAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
static ExternalTwoByteStringGetChars constexpr uint64_t kLog10OffsetTable[]
constexpr struct v8::internal::alignas wasm_double_2_power_52
constexpr struct v8::internal::alignas float_negate_constant
static int64_t atomic_pair_xor(intptr_t address, int value_low, int value_high)
constexpr struct v8::internal::alignas wasm_f64x2_convert_low_i32x4_u_int_mask
static int64_t atomic_pair_exchange(intptr_t address, int value_low, int value_high)
constexpr struct v8::internal::alignas double_negate_constant
uint32_t fp16_raw_bits_ieee_to_fp32_raw_bits(uint32_t input)
void MutableBigInt_BitwiseOrPosNegAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
bool IsValidAbortReason(int reason_id)
void MutableBigInt_BitwiseAndPosPosAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
static Address InvalidatePrototypeChainsWrapper(Address raw_map)
static Address JSReceiverCreateIdentityHash(Isolate *isolate, Address raw_key)
return ComputeSeededHash(static_cast< uint32_t >(key), HashSeed(isolate))
uintptr_t ArrayIndexOfIncludesSmiOrObject(Address array_start, uintptr_t array_len, uintptr_t from_index, Address search_element)
constexpr struct v8::internal::alignas wasm_i8x16_splat_0x01
void InvokeFunctionCallbackGeneric(const v8::FunctionCallbackInfo< v8::Value > &info)
void MutableBigInt_AbsoluteSubAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
@ kExternalObjectValueTag
static void atomic_pair_store(intptr_t address, int value_low, int value_high)
constexpr struct v8::internal::alignas wasm_i8x16_splat_0x0f
WriteBarrier::EphemeronKeyWriteBarrierFromCode ExternalPointerHandle AllocateAndInitializeYoungExternalPointerTableEntry(Isolate *isolate, Address pointer)
constexpr struct v8::internal::alignas wasm_i8x16_splat_0x55
V8_EXPORT_PRIVATE FlagValues v8_flags
void CopyTypedArrayElementsSlice(Address raw_source, Address raw_destination, uintptr_t start, uintptr_t end)
uint32_t fp64_raw_bits_to_fp16_raw_bits_for_32bit_arch(uint32_t hi, uint32_t lo)
static int64_t atomic_pair_load(intptr_t address)
intptr_t SearchStringRaw(Isolate *isolate, const SubjectChar *subject_ptr, int subject_length, const PatternChar *pattern_ptr, int pattern_length, int start_index)
void MutableBigInt_AbsoluteAddAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
tsan_relaxed_store_8_bits tsan_relaxed_store_32_bits tsan_seq_cst_store_8_bits tsan_seq_cst_store_function_32_bits
NameDictionaryLookupForwardedString< NameDictionary, kFindInsertionEntry > NameDictionaryLookupForwardedString< GlobalDictionary, kFindInsertionEntry > NameDictionaryLookupForwardedString< NameToIndexHashTable, kFindInsertionEntry > CopyTypedArrayElementsToTypedArray StringForwardingTable::GetForwardStringAddress static ArrayIndexOfIncludesSmiOrObject Address LexicographicCompareWrapper(Isolate *isolate, Address smi_x, Address smi_y)
uint32_t ExternalPointerHandle
static int64_t atomic_pair_and(intptr_t address, int value_low, int value_high)
const uint8_t * TypedArrayAndRabGsabTypedArrayElementsKindSizes()
uint16_t DoubleToFloat16(double value)
template ExternalReference ExternalReference::search_string_raw< const base::uc16, const base::uc16 >()
void MutableBigInt_LeftShiftAndCanonicalize(Address result_addr, Address x_addr, intptr_t shift)
constexpr struct v8::internal::alignas fp16_absolute_constant
uint64_t HashSeed(Isolate *isolate)
static ExternalReference::Type BuiltinCallTypeForResultSize(int result_size)
tsan_relaxed_store_8_bits tsan_relaxed_store_32_bits tsan_seq_cst_store_8_bits tsan_seq_cst_store_32_bits tsan_relaxed_load_32_bits Address raw_context
static uint64_t atomic_pair_compare_exchange(intptr_t address, int old_value_low, int old_value_high, int new_value_low, int new_value_high)
constexpr struct v8::internal::alignas wasm_i8x16_popcnt_mask
int32_t MutableBigInt_AbsoluteModAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
constexpr struct v8::internal::alignas wasm_int32_overflow_as_float
template ExternalReference ExternalReference::search_string_raw< const uint8_t, const base::uc16 >()
int32_t MutableBigInt_AbsoluteDivAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
static size_t NameDictionaryLookupForwardedString(Isolate *isolate, Address raw_dict, Address raw_key)
void relaxed_memcpy(volatile base::Atomic8 *dest, volatile const base::Atomic8 *src, size_t n)
constexpr struct v8::internal::alignas wasm_i16x8_splat_0x0001
static int64_t atomic_pair_sub(intptr_t address, int value_low, int value_high)
void CopyFastNumberJSArrayElementsToTypedArray(Address raw_context, Address raw_source, Address raw_destination, uintptr_t length, uintptr_t offset)
void InvokeAccessorGetterCallback(v8::Local< v8::Name > property, const v8::PropertyCallbackInfo< v8::Value > &info)
constexpr double double_uint32_bias_constant
constexpr uint8_t kNumIsolateFieldIds
constexpr uint32_t kMaxUInt32
constexpr double double_one_half_constant
static void f64_acos_wrapper(Address data)
void abort_with_reason(int reason)
void MutableBigInt_BitwiseXorPosPosAndCanonicalize(Address result_addr, Address x_addr, Address y_addr)
void * libc_memcpy(void *dest, const void *src, size_t n)
return unibrow::Utf16::HasUnpairedSurrogate(code_units, length) ? kTrue void ReplaceUnpairedSurrogates(const uint16_t *source_code_units, uint16_t *dest_code_units, size_t length)
BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL int size_t search_length
constexpr struct v8::internal::alignas float_absolute_constant
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
constexpr struct v8::internal::alignas wasm_i32x8_int32_overflow_as_float
#define CHECK_NOT_NULL(val)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
static V8_EXPORT_PRIVATE std::atomic_uint runtime_stats
#define T1(name, string, precedence)
#define T2(name, string, precedence)
#define WASM_JS_EXTERNAL_REFERENCE_LIST(V)